Django笔记-5-视图
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Django筆記-5-視圖
概述
作用
視圖接受web請求, 并相應(yīng)web請求;
本質(zhì)
視圖就是一個Python中的函數(shù)
相應(yīng)
- 網(wǎng)頁
- 重定向
- 錯誤視圖
- 404
- 500
- ...
- Json數(shù)據(jù)
- 過程: 用戶輸入網(wǎng)址→Django解析網(wǎng)址→(獲得訪問字段)→匹配urls→(獲得視圖函數(shù))→視圖通過模板渲染數(shù)據(jù)→返回給瀏覽器
url配置
配置流程
制定根URL配置文件
在project文件夾下, seetings.py文件夾下
ROOT_URLCONF=‘project.urls’urlpatterns
-
一個url實例的列表
-
url對象
- 正則表達式
- 視圖名稱
- 名稱
url匹配正則表達式的注意事項
- 如果想要從url中獲取一個值, 需要對正則加小括號
- 匹配正則前方不需要增加反斜杠
- 正則前需要加r表示字符串不轉(zhuǎn)義
引入其他url配置
在應(yīng)用中創(chuàng)建urls.py文件, 定義此應(yīng)用的url方法, 在主項目文件urls.py中使用include()方法引入;
URL的反向解析
-
概述
如果在視圖/模板中使用了硬編碼鏈接, 在url配置發(fā)生改變時,動態(tài)生成鏈接的地址全部需要更改
-
解決
在使用鏈接時, 通過url配置的名稱,動態(tài)生成url地址
-
作用
使用url模板
示例:
# project/urls.py url(r'^', include('app.urls', namespace="app")) # app/urls.py url(r'^good/(\d+)/$)', views.good, name='good' # index.html <a href="/good/1/">硬編碼鏈接</a> <a href="{% url 'app:good ' 1 %}">反向解析鏈接</a>
視圖函數(shù)
定義視圖
本質(zhì): 一個函數(shù)
-
視圖參數(shù):
- request:一個HttpRequest的實例
- 通過正則表達式獲取的參數(shù)
-
位置
一般在views.py文件下定義
錯誤視圖
-
404視圖:找不到網(wǎng)頁時返回錯誤
在templates目錄下定義404.html
配置settings.py
DEBUG=False
ALLOWED_HOST=[‘*’] # 允許任何人訪問 ```
-
500視圖:在視圖代碼中出現(xiàn)錯誤
-
400視圖:用戶的操作出現(xiàn)錯誤
HttpRequest 對象
概述
服務(wù)器接收http請求后, 會根據(jù)報文創(chuàng)建HttpResponse對象;
視圖的第一個參數(shù)就是HttpResponse對象
Django創(chuàng)建的, 之后調(diào)用視圖時傳遞的視圖
屬性
方法
is_ajax(): 如果是通過XMLHttpRequest發(fā)起的, 返回True
QueryDict對象
request對象中的GET/POST都屬于QueryDict對象;
方法
-
get()
作用: 根據(jù)鍵獲取值, 僅一個值
-
getlist()
將鍵的值以列表的形式返回, 可以獲取多個值
GET屬性
目的: 獲取瀏覽器傳遞給服務(wù)器的數(shù)據(jù)
POST屬性
使用表單提交POST請求
關(guān)閉CSRF
HttpResponse對象
概述
作用: 給瀏覽器返回數(shù)據(jù);
HttpRequest對象是由django創(chuàng)建的, HttpResponse對象是由程序員創(chuàng)建
用法
-
不調(diào)用模板,直接返回數(shù)據(jù)
-
調(diào)用模板
-
使用render方法
-
原型
render(request, templateName, {context})
-
作用
結(jié)合數(shù)據(jù)和模板, 返回完成的HTML頁面
-
參數(shù)
request
templateName
context
-
示例
def students(request):student_list = Student.objects.all()return render(request, 'app/students.html',{"students": student_list})
-
-
屬性
-
content: 返回內(nèi)容
-
charset: 返回數(shù)據(jù)的編碼格式
-
status_code: 響應(yīng)狀態(tài)
200/304/404...
-
content-type: 指定輸出的MIME類型
方法
-
init
使用頁面內(nèi)容實例化HttpResponse對象
-
write(content)
以文件的形式寫入
-
flush()
以文件的形式輸出緩沖區(qū)
-
set_cookie(key, value=‘’, max_Age=None, exprise=None)
設(shè)置cookies
-
delete_cookie(key)
刪除cookie
注意:
如果刪除一個不存在的cookie , 那么什么都不會發(fā)生.
子類HttpResponseRedirect
-
功能
重定向: 服務(wù)器端的跳轉(zhuǎn)
簡寫: redirect()
to 推薦使用反向解析
子類JsonResponse
-
返回json數(shù)據(jù), 一般用于異步請求(ajax)
-
__init__ :(self, data)
-
data: 字典對象
-
注意: content-type類型為application/json
Session狀態(tài)保持
概述
-
http協(xié)議是無狀態(tài)的, 每次請求都是一次新的請求, 不記住之前請求.
-
客戶端與服務(wù)器端的一次通信就是一次會話
-
為實現(xiàn)狀態(tài)的保持, 在客戶端或服務(wù)端存儲會話的數(shù)據(jù)
存儲方式有cookie和session
- cookie: 所有數(shù)據(jù)都存儲在客戶端, 不要存敏感數(shù)據(jù)(不安全,數(shù)據(jù)量小)
- session: 所有數(shù)據(jù)存儲在服務(wù)端, 在客戶端用cookie存儲session_id
目的
在一段時間內(nèi)跟蹤請求者的狀態(tài), 可以實現(xiàn)跨頁面訪問當(dāng)前的請求者數(shù)據(jù)
注意
不同的請求者不共享此數(shù)據(jù), 與請求者一一對應(yīng).
啟用session
settings.py中
-
INSTALLED_APPS中默認(rèn)啟用
-
MIDDLEWARE中默認(rèn)啟用
使用session
-
啟用session后, 每個HttpRequest對象都有一個session屬性,就是一個類似字典的對象;
-
get(key, default=None): 根據(jù)鍵獲取session值
-
clear(): 清空所有的會話
-
flush(): 刪除當(dāng)前的會話和cookie
-
設(shè)置過期時間:set_expiry(value)
如果不設(shè)置,兩個星期后過期;
value是整數(shù):例如10,表示10秒鐘;
-
存儲session的位置
- 數(shù)據(jù)庫: 默認(rèn)存儲在 數(shù)據(jù)庫中;
- 緩存: 只存儲在本地內(nèi)存中, 如果丟失不能找回,比數(shù)據(jù)庫快;
- 數(shù)據(jù)庫和緩存: 優(yōu)先從本地緩存中讀取, 讀取不到再去數(shù)據(jù)庫中獲取
-
使用redis存儲session
- pip install django-redis-session
看老師犯了個錯誤的心得: 每個代碼都很重要.
轉(zhuǎn)載于:https://my.oschina.net/frank1126/blog/3055816
總結(jié)
以上是生活随笔為你收集整理的Django笔记-5-视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HP-UX 11.31根盘镜像(RX26
- 下一篇: 我的百阿之旅