Django 學(xué)習(xí)四:url路由和視圖

前面我們已經(jīng)創(chuàng)建好數(shù)據(jù)模型了,并且在admin后臺(tái)中添加了一些測(cè)試用戶。下面我們就要設(shè)計(jì)好站點(diǎn)的url路由、對(duì)應(yīng)的處理視圖函數(shù)以及使用的前端模板了。

一、 路由設(shè)計(jì)

我們初步設(shè)想需要下面的四個(gè)URL:

URL 視圖 模板 說(shuō)明
/index/ login.views.index() index.html 主頁(yè)
/login/ login.views.login() login.html 登錄
/register/ login.views.register() register.html 注冊(cè)
/logout/ login.views.logout() 無(wú)需專門的頁(yè)面 登出

考慮到登錄系統(tǒng)屬于站點(diǎn)的一級(jí)功能,為了直觀和更易于接受,這里沒(méi)有采用二級(jí)路由的方式,而是在根路由下直接編寫路由條目,同樣也沒(méi)有使用反向解析名(name參數(shù))。根據(jù)上面的策劃,打開mysite/urls.py文件,寫入下面的代碼:

from django.conf.urls import url
from django.contrib import admin
from login import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^login/', views.login),
    url(r'^register/', views.register),
    url(r'^logout/', views.logout),
]

注意要先從login導(dǎo)入views模塊。

二、 架構(gòu)初步視圖

路由寫好了,就進(jìn)入login/views.py文件編寫視圖的框架,代碼如下:

from django.shortcuts import render
from django.shortcuts import redirect

# Create your views here.


def index(request):
    pass
    return render(request, 'login/index.html')


def login(request):
    pass
    return render(request, 'login/login.html')


def register(request):
    pass
    return render(request, 'login/register.html')


def logout(request):
    pass
    return redirect("/index/")

我們先不著急完成視圖內(nèi)部的具體細(xì)節(jié),而是把框架先搭建起來(lái)。

注意:

  • 在頂部額外導(dǎo)入了redirect,用于logout后,頁(yè)面重定向到‘index’首頁(yè);
  • 四個(gè)視圖都返回一個(gè)render()調(diào)用,render方法接收request作為第一個(gè)參數(shù),要渲染的頁(yè)面為第二個(gè)參數(shù),以及需要傳遞給頁(yè)面的數(shù)據(jù)字典作為第三個(gè)參數(shù)(可以為空),表示根據(jù)請(qǐng)求的部分,以渲染的HTML頁(yè)面為主體,使用模板語(yǔ)言將數(shù)據(jù)字典填入,然后返回給用戶的瀏覽器。
  • 渲染的對(duì)象為login目錄下的html文件,這是一種安全可靠的文件組織方式。

三、 創(chuàng)建HTML頁(yè)面文件

在項(xiàng)目根路徑的login目錄中創(chuàng)建一個(gè)templates目錄,再在templates目錄里創(chuàng)建一個(gè)login目錄。這么做有助于app復(fù)用,防止命名沖突,能更有效地組織大型工程,具體說(shuō)明請(qǐng)參考教程前面的相關(guān)章節(jié)。

login/templates/login目錄中創(chuàng)建三個(gè)文件index.htmllogin.html以及register.html

,并寫入如下的代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
</head>
<body>
<h1>首頁(yè)!</h1>
</body>
</html>

login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登錄</title>
</head>
<body>
<h1>登錄頁(yè)面</h1>
</body>
</html>

register.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注冊(cè)</title>
</head>
<body>
<h1>注冊(cè)頁(yè)面</h1>
</body>
</html>

到目前為止,我們的工程目錄結(jié)構(gòu)如下圖所示:

12.png-22.4kB

四、 測(cè)試路由和視圖

啟動(dòng)服務(wù)器,在瀏覽器訪問(wèn)http://127.0.0.1:8000/index/等頁(yè)面,如果能正常顯示,說(shuō)明一切OK!

13.png-11kB

現(xiàn)在,我們整個(gè)項(xiàng)目的基本框架已經(jīng)搭建起來(lái)了!
原文:http://www.liujiangblog.com/course/django/106

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。