request進(jìn)來(lái)->從服務(wù)器獲取數(shù)據(jù)->處理數(shù)據(jù)->把網(wǎng)頁(yè)呈現(xiàn)出來(lái)
url
設(shè)置相當(dāng)于客戶(hù)端向服務(wù)器發(fā)出request請(qǐng)求的入口
, 并用來(lái)指明要調(diào)用的程序邏輯views
用來(lái)處理程序邏輯, 然后呈現(xiàn)到template(一般為GET
方法, POST
方法略有不同)template
一般為html+CSS的形式, 主要是呈現(xiàn)給用戶(hù)的表現(xiàn)形式Django中views里面的代碼就是一個(gè)一個(gè)函數(shù)邏輯, 處理客戶(hù)端(瀏覽器)發(fā)送的HTTPRequest, 然后返回HTTPResponse,
那么那么開(kāi)始在my_blog/article/views.py中編寫(xiě)簡(jiǎn)單的邏輯
#現(xiàn)在你的views.py應(yīng)該是這樣
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def home(request):
return HttpResponse("Hello World, Django")
那么如何使這個(gè)邏輯在http請(qǐng)求進(jìn)入時(shí), 被調(diào)用呢, 這里需要在my_blog/my_blog/urls.py
中進(jìn)行url設(shè)置
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'my_blog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home'), #由于目前只有一個(gè)app, 方便起見(jiàn), 就不設(shè)置include了
)
url()
函數(shù)有四個(gè)參數(shù), 兩個(gè)是必須的:regex和view, 兩個(gè)可選的:kwargs和name
regex
是regular expression的簡(jiǎn)寫(xiě),這是字符串中的模式匹配的一種語(yǔ)法, Django 將請(qǐng)求的URL從上至下依次匹配
列表中的正則表達(dá)式,直到匹配到一個(gè)為止。更多正則表達(dá)式的使用可以查看Python正則表達(dá)式
view
當(dāng) Django匹配了一個(gè)正則表達(dá)式就會(huì)調(diào)用指定的view邏輯, 上面代碼中會(huì)調(diào)用article/views.py中的home函數(shù)kwargs
任意關(guān)鍵字參數(shù)可傳一個(gè)字典至目標(biāo)viewname
命名你的 URL, 使url在 Django 的其他地方使用, 特別是在模板中現(xiàn)在在瀏覽器中輸入127.0.0.1:8000
應(yīng)該可以看到下面的界面
http://wiki.jikexueyuan.com/project/django-set-up-blog/images/64.png" alt="成功" />
很多時(shí)候我們希望給view中的函數(shù)邏輯傳入?yún)?shù), 從而呈現(xiàn)我們想要的結(jié)果
現(xiàn)在我們這樣做, 在my_blog/article/views.py加入如下代碼:
def detail(request, my_args):
return HttpResponse("You're looking at my_args %s." % my_args)
在my_blog/my_blog/urls.py中設(shè)置對(duì)應(yīng)的url,
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'my_blog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home'),
url(r'^(?Pd+)/$', 'article.views.detail', name='detail'),
)
^(?Pd+)/$
這個(gè)正則表達(dá)式的意思是將傳入的一位或者多位數(shù)字作為參數(shù)傳遞到views中的detail作為參數(shù), 其中?P
定義名稱(chēng)用于標(biāo)識(shí)匹配的內(nèi)容
一下url都能成功匹配這個(gè)正則表達(dá)數(shù)
http://127.0.0.1:8000/1000/
http://127.0.0.1:8000/9/
嘗試傳參訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)
修改在my_blog/article/views.py代碼:
from django.shortcuts import render
from django.http import HttpResponse
from article.models import Article
# Create your views here.
def home(request):
return HttpResponse("Hello World, Django")
def detail(request, my_args):
post = Article.objects.all()[int(my_args)]
str = ("title = %s, category = %s, date_time = %s, content = %s"
% (post.title, post.category, post.date_time, post.content))
return HttpResponse(str)
這里最好在admin后臺(tái)管理界面增加幾個(gè)Article對(duì)象, 防止查詢(xún)對(duì)象為空, 出現(xiàn)異常
現(xiàn)在可以訪(fǎng)問(wèn)http://127.0.0.1:8000/1/
顯示如下數(shù)據(jù)表示數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)正確(這些數(shù)據(jù)都是自己添加的), 并且注意Article.objects.all()返回的是一個(gè)列表
http://wiki.jikexueyuan.com/project/django-set-up-blog/images/65.png" alt="數(shù)據(jù)" />
小結(jié):