一,建立專案
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',)
重新整理瀏覽器,如下: