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