django搭建博客

----------------------------------------

  Django 自稱是“最適合開發有限期的完美WEB框架”。本文參考《Django web開發指南》,快速搭建一個blog 出來,在中間涉及諸多知識點,這里不會詳細說明,如果你是第一次接觸Django ,本文會讓你在感性上對Django有個認識,完成本文操作后會讓你有興趣閱讀的相關書籍和文檔。

廢話少說,come on!!

本操作的環境:

===================

Windows 7/10

python 2.7

Django 1.8.2

===================

創建工程

創建mysite工程項目:

D:/djpy> django-admin.py startproject mysite

工程目錄結構:

manage.py ----- Django項目里面的工具,通過它可以調用django shell和數據庫等。

settings.py ---- 包含了項目的默認設置,包括數據庫信息,調試標志以及其他一些工作的變量。

urls.py ----- 負責把URL模式映射到應用程序。

創建blog應用

在mysite目錄下創建blog應用

D:/pydj> cd mysite

D:/djpy/mysite$ python manage.py startapp blog

目錄結構:

初始化admin后臺數據庫

  python 自帶SQLite數據庫,Django支持各種主流的數據庫,這里為了方便推薦使用SQLite,如果使用其它數據庫請在settings.py文件中設置。

切換到mysite創建數據庫:

D:/djpy/mysite$ python manage.py syncdb

C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9

warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:

Synchronize unmigrated apps: staticfiles, messages

Apply all migrations: admin, contenttypes, auth, sessions

Synchronizing apps without migrations:

Creating tables...

Running deferred SQL...

Installing custom SQL...

Running migrations:

Rendering model states... DONE

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying sessions.0001_initial... OK

You have installed Django's auth system, and don't have any superusers defined.

Would you like to create one now? (yes/no): yes

Username (leave blank to use 'fnngj'): ? ?用戶名(默認當前系統用戶名)

Email address: fnngj@126.com ? ? 郵箱地址

Password: ? ? 密碼

Password (again): ? ?重復密碼

Superuser created successfully.

設置admin應用

  admin 是Django 自帶的一個后臺管理系統。

1、添加blog應用,打開mysite/mysite/settings.py 文件:

# Application definition

INSTALLED_APPS = (

? ?'django.contrib.admin',

? ?'django.contrib.auth',

? ?'django.contrib.contenttypes',

? ?'django.contrib.sessions',

? ?'django.contrib.messages',

? ?'django.contrib.staticfiles',

? ?'blog',

)

在列表末尾,添加blog 應用

2、在我們創建django項目時,admin就已經創建,打開mysite/mysite/urls.py文件:

from django.conf.urls import include, url

from django.contrib import admin

urlpatterns = [

? ?url(r'^admin/', include(admin.site.urls)),

]

3、啟動django容器

D:\pydj\mysite>python manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

October 04, 2015 - 20:56:45

Django version 1.8.2, using settings 'mysite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CTRL-BREAK.

4、訪問后臺應用

http://127.0.0.1:8000/admin

輸入用戶、密碼,用戶名密碼為第一次創建數據庫時創建的。回想“設置數據庫”時的設置。

設計Model(即設計數據庫表)

1、設計model

  現在我們打開blog目錄下的models.py文件,這是我們定義blog數據結構的地方。打開mysite/blog/models.py 文件進行修改:

from django.db import models

from django.contrib import admin

# Create your models here.class BlogsPost(models.Model):

? ?title = models.CharField(max_length = 150)

? ?body = models.TextField()

? ?timestamp = models.DateTimeField()

admin.site.register(BlogsPost)

2、 再次初始化數據庫

D:\pydj\mysite>python manage.py makemigrations blog

Migrations for 'blog':

?0001_initial.py:

? ?- Create model BlogsPost

D:\pydj\mysite>python manage.py syncdb

C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9

?warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:

?Synchronize unmigrated apps: staticfiles, messages

?Apply all migrations: admin, blog, contenttypes, auth, sessions

Synchronizing apps without migrations:

?Creating tables...

? ?Running deferred SQL...

?Installing custom SQL...

Running migrations:

?Rendering model states... DONE

?Applying blog.0001_initial... OK

3、再次runserver啟動服務,訪問admin后臺,創建文章。

  登陸成功選擇add 創建博客

輸入博客標題,正文、日期時間、點擊save 創建博客。

設置admin 的BlogsPost界面

  打開mysite/blog/models.py 文件,做如下修改:

from django.db import models

from django.contrib import admin

# Create your models here.class BlogsPost(models.Model):

? ?title = models.CharField(max_length = 150)

? ?body = models.TextField()

? ?timestamp = models.DateTimeField()

class BlogPostAdmin(admin.ModelAdmin):

? ?list_display = ('title','timestamp')

admin.site.register(BlogsPost,BlogPostAdmin)

創建BlogPostAdmin類,繼承admin.ModelAdmin父類,以列表的形式顯示BlogPost的標題和時間。

創建blog的公共部分

從Django的角度看,一個頁面具有三個典型的組件:

一個模板(template):模板負責把傳遞進來的信息顯示出來。

一個視圖(view):視圖負責從數據庫獲取需要顯示的信息。

一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。

創建模板

在blog項目下創建templates目錄(mysite/blog/templates/),在目錄下創建模板文件index.html,內容如下:

{% for post in posts %}

? ?

{{ post.title }}

{{ post.timestamp }}

{{ post.body }}

{% endfor%}

創建視圖函數

打開mysite/blog/views.py文件:

#coding=utf-8from django.shortcuts import render

from blog.models import BlogsPost

from django.shortcuts import render_to_response

# Create your views here.def index(request):

? ?blog_list = BlogsPost.objects.all()

? ?return render_to_response('index.html',{'blog_list':blog_list})

blog_list = BlogPost.objects.all() :獲取數據庫里面所擁有BlogPost對象

render_to_response()返回一個頁面(index.html),順帶把數據庫中查詢出來的所有博客內容(blog_list)也一并返回。

創建blog的URL模式

在mysite/urls.py文件里添加blog的url:

#coding=utf-8from django.conf.urls import patterns, include, url

from django.contrib import admin

urlpatterns = patterns('',

? ?url(r'^admin/', include(admin.site.urls)),

? ?url(r'^index/$', 'blog.views.index'),

)

再次啟動服務($ python manage.py runserver),訪問blog應用(http://127.0.0.1:8000/index/)下圖有錯,僅供參考。

頁面如下:

當然,讀者可以繼續到admin后臺添加blog,從而刷新這個頁是否顯示新添加的blog。

添加樣式

創建基礎模板

在mysite/blog/templates目錄里創建base.html的模板:

body{color:#efd;background:#453;padding:0 5em;margin:0}

h1{padding:2em 1em;background:#675}

h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}

? ? ? ?p{margin:1em 0}

蟲師blog

大人不華,君子務實

{% block content %}

{% endblock %}

修改index.html模板,讓它引用base.html模板和它的“content”塊。

{% extends "base.html" %}

?{% block content %}

? ? ?{% for post in posts %}

? ? ?

{{ ?post.title }}

{{ post.timestamp | date:"1,F jS"}}

{{ post.body }}

{% endfor %}

{% endblock %}

再次刷新博客頁面:

http://127.0.0.1/index/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容