- Django 密碼存儲
Django 提供靈活的密碼存儲系統(tǒng)窘问,默認使用 PBKDF2烛芬。
對象的password
屬性是這種格式的字符串:
<algorithm>$<iterations>$<salt>$<hash>
總共有四個部分:散列算法隧期, 算法迭代次數,隨機鹽和生成的密碼哈希赘娄。
Django 通過查詢 PASSWORD_HASHERS
來設置要使用的算法仆潮。第一個條目用于存儲密碼,其它是可用于檢查現有密碼的有效哈希遣臼。
- Django request 什么時候創(chuàng)建的
可以在 Django 項目的wsgi.py
文件中一步一步跟進去查看源碼
request 是在WSGIHandler
中創(chuàng)建的性置,http 請求到來之后調用其__call__
方法,在里面創(chuàng)建了 request暑诸,是一個WSGIRequest
類型的對象蚌讼,它繼承自HttpRequest
對象,它會解析 http 請求的參數个榕,并封裝GET
,POST
等方法。在GET
中返回一個QueryDict
對象芥喇,這個是 Django 自定義的類似字典的類西采,它是 dict 的子類型,用來處理同一個鍵帶多個值的情況继控。類似以下這樣
>>> from django.conf import settings
>>> q = QuertDict('a=1&a=2&a=3&b=1&b=2&b=3')
>>> q
>>> <QueryDict:{'a': ['1', '2', '3'], b:['1', '2', '3']}>
>>> q['a']
'3'
>>> q.getlist('a')
['1', '2', '3']
- request 主要屬性
scheme
請求的方法 http/https
path
請求的全路徑械馆,不包含域名部分
method
請求的類型胖眷,GET、POST
COOKIES
請求的 cookie
META
請求頭的相關信息霹崎,獲取 IP 地址META['REMOTE_ADDR']
user
當前登錄的用戶
session
當前會話的字典對象 - response 主要屬性
content
響應內容的字節(jié)
charset
響應內容被編碼所使用的字符集
status_code
響應碼
子類
HttpResponseRedirect
重定向 302
HttpResponseNotFound
網頁未找到 404
HttpResponseForbidden
沒有權限 403
HttpResponseServerError
服務器錯誤 500
JsonResponse
以 Json 格式返回珊搀,不是 html/xml
以上詳情見官網。 - 中間件的調用過程
一看源碼便知:
if hasattr(mw_instance, 'process_request'):
self._request_middleware.append(mw_instance.process_request)
if hasattr(mw_instance, 'process_view'):
self._view_middleware.append(mw_instance.process_view)
# 請求到來時:以上是從上到下調用
# 請求結束后:以下是從下到上調用
if hasattr(mw_instance, 'process_template_response'):
self._template_response_middleware.insert(0, mw_instance.process_template_response)
if hasattr(mw_instance, 'process_response'):
self._response_middleware.insert(0, mw_instance.process_response)
if hasattr(mw_instance, 'process_exception'):
self._exception_middleware.insert(0, mw_instance.process_exception)
只要注意理解 append
和 insert
的區(qū)別即可
-
Django 一次響應
Django 一次響應的總結 重定向問題
一般經常使用HttpResponseRedirect
或redirect
來實現跳轉尾菇,不同的是HttpResponseRedirect
使用狀態(tài)碼302
境析,而redirect
使用狀態(tài)碼301
。redirect
配合reverse
使用派诬。另外也可以在定義url
的時候使用redirect_to
來重定向劳淆。在session
中也可以傳值來重定向。數據庫讀寫分離
有兩種方法:
手動 通過使用 .using(db_name) 來指定數據庫
自動 配置一個 Router 類默赂,然后重寫一些方法沛鸵。settings.py
中指定DATABASE_ROUTERS
,配置DATABASE_ROUTERS = ['myrouter.Router',]