Django Web应用开发实战第十一章
生活随笔
收集整理的這篇文章主要介紹了
Django Web应用开发实战第十一章
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、會話控制
Django內(nèi)置的會話控制簡稱為session,可以為用戶提供基礎的數(shù)據(jù)存儲。
數(shù)據(jù)主要存儲在服務器上,并且網(wǎng)站上的任意站點都能使用會話數(shù)據(jù)。
當用戶第一次訪問網(wǎng)站時,網(wǎng)站的服務器將自動創(chuàng)建一個session對象,該session對象相當于該用戶在網(wǎng)站的一個身份憑證,而且session對象中的數(shù)據(jù)不會丟失,只有session過期或被清理時,服務器才將session中存儲的數(shù)據(jù)清空并終止該session。 session & cookie
- session存儲在服務器端,cookie存儲在客戶端,所以session的安全性比cookie高
- 當獲取某用戶session數(shù)據(jù)時,首先從用戶傳遞的cookie里獲取sessionid,然后根據(jù)sessionid在網(wǎng)站服務器找到相應的session
- session存放在服務器的內(nèi)存中,session的數(shù)據(jù)不斷增加會造成服務器的負擔,因此存放在session中的數(shù)據(jù)不能過于龐大 session數(shù)據(jù)默認存儲在數(shù)據(jù)表django_session中,也可以設置保存方式:
# 數(shù)據(jù)庫保存方式,可配置
# 默認保存方式
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 以文件形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
# 使用文件保存可以設置文件保存路徑
SESSION_FILE_PATH = '/MyDjango' # 以緩存形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# 設置緩存名
SESSION_CACHE_ALIAS = 'default' # 以數(shù)據(jù)庫加緩存形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 以cookie形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 其他屬性配置
SESSION_COOKIE_NAME = 'sessionid' # 瀏覽器的Cookie以鍵值對的形式保存,該設置session_key的key SESSION_COOKIE_PATH = '/' # 設置cookie生效路徑,默認值為'/',即127.0.0.1:8000 SESSION_COOKIE_DOMAIN = None # 設置瀏覽器cookie生效域名 SESSSION_COOKIE_SECURE = False # 設置傳輸方式,F(xiàn)alse表示使用HTTP,否則HTTPS SESSION_COOKIE_HTTPONLY = True # 是否只能使用HTTP SESSION_COOKIE_AGE = 1209600 # 設置cookie有效期,默認兩周 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得cookie過期,默認False SESSION_SAVE_EVERY_REQUEST = False # 是否每次發(fā)送后保存cookie,默認為False # session讀寫
# 獲取存儲在session的數(shù)據(jù),直接取key不存在會報錯
request.session['k1']
request.session.get('k1', '')
request.session.setdefault('k1', '') # 設置session數(shù)據(jù)
request.session['k1'] = 123 # 刪除session中的數(shù)據(jù)
del request.session['k1'] # 刪除整個session
request.session.clear() # 獲取session的keys
request.session.keys() # 獲取session的values
request.session.values() # 獲取session的session_key,即數(shù)據(jù)表django_session中的session_key字段
request.session.session_key
二、緩存機制
緩存類型:
- 全站緩存:一般情況下不采用
- 視圖緩存:當用戶發(fā)送請求的視圖已生成緩存數(shù)據(jù)則以緩存數(shù)據(jù)作為響應內(nèi)容
- 路由緩存:作用與緩存視圖相同,兩者區(qū)別在于兩個路由同指一個視圖,路由緩存會判斷路由地址是否已生成緩存而決定是否執(zhí)行視圖函數(shù)
- 模板緩存:看減少模板引擎解析生成HTML的時間 【全站緩存】
配置中間件
MIDDLEWARE = [
# 配置全站緩存
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
# 添加中間件LocaleMiddleware
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 配置全站緩存
'django.middleware.cache.FecthFromCacheMiddleware',
]
# 設置緩存生命周期
CACHE_MIDDLEWARE_SECONDS = 15
# 設置緩存數(shù)據(jù)保存在數(shù)據(jù)表中
# 屬性值default來自于緩存配置CACHES的default
CACHE_MIDDLEWARE_ALIAS = 'default'
# 設置緩存表字段cache_key的值
# 用于同一Django項目多個站點之間的共享緩存
CACHE_MIDDLEWARE_KEY_PREFIX = 'MyDjango' 【視圖緩存】
from django.views.decorators.cache import cache_page # 參數(shù)cache相當于CACHE_MIDDLEWARE_ALIAS
@cache_page(timeout=10, cache='MyDjango', key_prefix='MyView')
def index(request):
pass 【路由緩存】
from django.urls import path
from . import views urlpatterns = [
path('', cache_page(time_out=10, cache='MyDjango', key_prefix='MyURL')(views.index), name='index')
]
三、CSRF防護
CSRF(Cross-Site Request Forgery,跨站請求偽造),也稱One Click Attack或者Session Riding,通??s寫為CSRF或XSRF。
Django為了防護該類攻擊,在用戶提交表單時,表單會自動加入csrfmiddlewaretoken隱藏控件。
它會與網(wǎng)站后臺保存的值進行匹配。不匹配會被CSRFMiddleware中間件(創(chuàng)建項目時默認開啟)攔截,只適用于POST請求。 # 提交表單時加上
使用時在form標簽下加入{% csrf_token %}
# 取消表單csrf防護
from django.views.decorators.csrf import csrf_exempt # 取消csrf防護
@csrf_exempt
def index(request):
pass
四、自定義中間件
settings.py配置的屬性MIDDLEWARE中間件中進行設置,在創(chuàng)建項目,Django默認配置了7個中間件:
- SecurityMiddleware:內(nèi)置的安全機制,保護用戶與網(wǎng)站的通信安全。
- SessionMiddleware:會話session功能。
- CommonMiddleware:處理請求信息,規(guī)范化請求內(nèi)容。
- CsrfViewMiddleware:開始CSRF防護功能。
- AuthenticationMiddleware:開啟內(nèi)置的用戶認證系統(tǒng)。
- MessageMiddleware:開啟內(nèi)置的信息提示功能。
- XFrameOptionMiddleware:防止惡意程序點擊劫持。
# 鉤子函數(shù)
- __init__(): 初始化函數(shù),運行Django自動執(zhí)行
- process_request(): 完成請求對象的創(chuàng)建,但用戶訪問的網(wǎng)址尚未與網(wǎng)站的路由進行匹配
- process_view(): 完成用戶訪問網(wǎng)址與網(wǎng)站路由的匹配,單尚未執(zhí)行視圖函數(shù)
- process_exception(): 執(zhí)行視圖函數(shù)期間發(fā)生異常
- process_response(): 完成視圖的執(zhí)行,但尚未將響應內(nèi)容返回瀏覽器
總結
以上是生活随笔為你收集整理的Django Web应用开发实战第十一章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘启动怎么装驱动程序 安装驱动程序的U
- 下一篇: Innosetup 安装 VC_redi