網(wǎng)頁程序的邏輯
request進(jìn)來->從服務(wù)器獲取數(shù)據(jù)->處理數(shù)據(jù)->把網(wǎng)頁呈現(xiàn)出來
url設(shè)置相當(dāng)于客戶端向服務(wù)器發(fā)出request請求的入口, 并用來指明要調(diào)用的程序邏輯
views用來處理程序邏輯, 然后呈現(xiàn)到template(一般為GET方法,POST方法略有不同)
template一般為html+CSS的形式, 主要是呈現(xiàn)給用戶的表現(xiàn)形式
簡單Django Views和URL
Django中views里面的代碼就是一個(gè)一個(gè)函數(shù)邏輯, 處理客戶端(瀏覽器)發(fā)送的HTTPRequest, 然后返回HTTPResponse,
那么那么開始在my_blog/article/views.py中編寫簡單的邏輯
#現(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請求進(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, 方便起見, 就不設(shè)置include了
)
url()函數(shù)有四個(gè)參數(shù), 兩個(gè)是必須的:regex和view, 兩個(gè)可選的:kwargs和name
regex是regular expression的簡寫,這是字符串中的模式匹配的一種語法, Django 將請求的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)view
name命名你的 URL, 使url在 Django 的其他地方使用, 特別是在模板中
現(xiàn)在在瀏覽器中輸入127.0.0.1:8000應(yīng)該可以看到下面的界面
Django Views和URL更近一步
很多時(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è)置對應(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'^(?P\d+)/$', 'article.views.detail', name='detail'),
)
^(?P\d+)/$這個(gè)正則表達(dá)式的意思是將傳入的一位或者多位數(shù)字作為參數(shù)傳遞到views中的detail作為參數(shù), 其中?P定義名稱用于標(biāo)識匹配的內(nèi)容
一下url都能成功匹配這個(gè)正則表達(dá)數(shù)
嘗試傳參訪問數(shù)據(jù)庫
修改在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后臺管理界面增加幾個(gè)Article對象, 防止查詢對象為空, 出現(xiàn)異常
現(xiàn)在可以訪問http://127.0.0.1:8000/1/
顯示如下數(shù)據(jù)表示數(shù)據(jù)庫訪問正確(這些數(shù)據(jù)都是自己添加的), 并且注意Article.objects.all()返回的是一個(gè)列表
小結(jié):
如何編寫views和設(shè)置url
如何通過url向views傳參
如何通過參數(shù)來訪問數(shù)據(jù)庫資源