Django:快速搭建簡單的Blog?

Tags: 資料庫, ──,

一,建立專案

1, 為blog建立名為mysite的工程專案:

django-admin.py startproject mysite

2, 專案結構如下:

mysite

├── manage.py

└── mysite

├── __init__.py

├── settings.py

├── urls.py

└── wsgi.py

manage.py ----- Django專案裡面的工具,通過它可以呼叫django shell和資料庫等。

settings.py ---- 包含了專案的預設設定,包括資料庫資訊,除錯標誌以及其他一些工作的變數。

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

二 ,執行開發伺服器

要馬上檢視django專案應用的執行,可以使用Django專案裡的mange.py

切換到工程目錄,執行執行伺服器命令:

python manage.py runserver

完成:

開啟瀏覽器,輸入訪問地址:127.0.0.1:8000

三,建立Blog應用

python manage.py startapp blog

blog應用檔案結構如下:

├── blog

│ ├── admin.py

│ ├── __init__.py

│ ├── models.py

│ ├── tests.py

│ └── views.py

四,設計你的Model

在blog目錄下的models.py是blog應用的核心檔案之一,是定義blog資料結構的地方。

用編輯器開啟models.py

新新增BlogPost類,程式碼如下:

fromdjango.db importmodels

# Create your models here.

classBlogPost(models.Model):

title =models.CharField(max_length =150)

body =models.TextField()

timestamp =models.DateTimeField()

BlogPost類是django.db.models.Model的一個子類 。它有變數title(blog的標題),body(blog的內容部分),timestamp(blog的發表時間)。

五,設定資料庫

Dajango支援主流的資料庫伺服器(MySQL,PostgreSQL,Oracle和MSSQL),但本專案使用SQLite,這裡之需要通過一條簡單的命令可以建立SQLite資料庫。

建立資料庫:

切換到工程主目錄mysite/下,執行如下命令:

python manage.py syncdb

出現下面的提示,輸入yes,然後按照提示輸入相關的資訊。完成後會生成一個數據庫檔案db.sqlite3

六,設定自動admin應用

1,開啟mysite/mysite/urls.py,取消註釋url(r'^admin/', include(admin.site.urls))

2,編輯mysite/mysite/settings.py,在INSTALLED_APPS裡面新增blog應用。

新增後的程式碼如下:

# Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )

2,修改mysite/blog/models.py

在最後新增一行程式碼:

1 admin.site.register(BlogPost)

models.py完整的程式碼如下:

fromdjango.db importmodels

fromdjango.contrib importadmin

# Create your models here.

classBlogPost(models.Model):

title =models.CharField(max_length =150)

body =models.TextField()

timestamp =models.DateTimeField()

admin.site.register(BlogPost)

3 ,開啟瀏覽器,輸入,輸入剛才建立資料庫時候填寫的帳號就能進入admin介面。

七,試用admin

1, 點選Blog Posts右側的Add 按鈕,新增一個帖子。

2,讓admin的BlogPost介面更加美觀

修改blog應用的models.py,為它新增一個admin.ModelAdmin的子類BlogPostAdmin.以列表形式顯示BlogPost的標題和時間。

fromdjango.db importmodels

fromdjango.contrib importadmin

# Create your models here.

classBlogPost(models.Model):

title =models.CharField(max_length =150)

body =models.TextField()

timestamp =models.DateTimeField()

classBlogPostAdmin(admin.ModelAdmin):

list_display =('title','timestamp')

admin.site.register(BlogPost,BlogPostAdmin)

八,建立Blog的公共部分

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

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

一個檢視(viw):檢視負責從資料庫獲取需要顯示的資訊。

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

1,建立模板

在blog目錄下建立template目錄(mysite/blog/templates),建立模板檔案archive.html,它的內容如下:

{% for post in posts %}

{{ post.title }}

{{ post.timestamp }}

{{ post.body }}

{% endfor%}

2,建立一個檢視函式

在app應用的目錄下的view.py新增檢視函式

fromdjango.shortcuts importrender

fromdjango.template importloader,Context

fromdjango.http importHttpResponse

fromblog.models importBlogPost

# Create your views here.

defarchive(request):

posts =BlogPost.objects.all()

t =loader.get_template("archive.html")

c =Context({'posts':posts})

returnHttpResponse(t.render(c))

posts = BlogPost.objects.all() :獲取資料庫裡面所擁有BlogPost物件

t = loader.get_template("archive.html"):載入模板

c = Context({'posts':posts}):模板的渲染的資料是有一個字典類的物件Context提供,這裡的是一對鍵值對。

3,建立一個URL模式

第一步,在mysite/urls.py裡面取消下面的一行註釋:

#

把它變成:

url(r'^blog/', include('blog.urls')),

第二步:在blog應用裡面定義URL,建立一個urls.py(mysite/blog/urls.py)

fromdjango.conf.urls import*

fromblog.views importarchive

urlpatterns =patterns('',

url(r'^$',archive),

)

最後,在瀏覽器輸入如下地址

九,最後的潤色

1,模板的精確定位

在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}

my blog

{% block content %}

{% endblock %}

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

{%extends "base.html"%}

{%block content %}

{%forpost inposts %}

{{ post.title }}

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

{{ post.body }}

{%endfor %}

{%endblock %}

重新整理瀏覽器可以看到效果如下:

3,按日期排序

修改blog 應用下的models.py,為BlogPost新增一個Meta巢狀類。如下:

classBlogPost(models.Model):

title =models.CharField(max_length =150)

body =models.TextField()

timestamp =models.DateTimeField()

classMeta:

ordering =('-timestamp',)

重新整理瀏覽器,如下:

資料庫, ──,
相關問題答案