Django(十一)
阿新 • • 發佈:2022-04-03
django操作cookie和session
# session的預設過期時間是14天 '''在負載均衡中,如果使用session儲存使用者資訊,會出現session共享問題?''' 那麼, 如何解決上述問題? 常用的快取資料庫就是redis ''' 1. 快取雪崩 2. 快取穿透 3. 快取擊穿 ''' '''在settings.py中配置''' SESSION_COOKIE_NAME = "sessionid" # Session的cookie儲存在瀏覽器上時的key,即:sessionid=隨機字串(預設) SESSION_COOKIE_PATH = "/" # Session的cookie儲存的路徑(預設) SESSION_COOKIE_DOMAIN = None # Session的cookie儲存的域名(預設) SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(預設) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支援http傳輸(預設) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(預設) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期(預設) SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都儲存Session,預設修改之後才儲存(預設)
CBV新增裝飾器
from django.views import View from django.utils.decorators import method_decorator @method_decorator(login_auth, 'get') # 第二種方式新增 @method_decorator(login_auth, 'post') class IndexView(View): @method_decorator(login_auth) # 第三張方式給所有的方法新增裝飾器 def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs) # @method_decorator(login_auth) # 第一種方式新增裝飾器 def get(self, request): return HttpResponse('get') def post(self, request): return HttpResponse('post')
中介軟體
django給我們提供了7箇中間件,在配置檔案中查詢 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] # 還支援我們自定義中介軟體 ''' 中介軟體用來幹嘛: 1. 校驗許可權 2. 限制訪問頻率 3. 檢查認證 ... ''' 步驟: 1. 在任何一個應用下面,建立一個py檔案 2. 在py檔案中寫一個類必須要繼承MiddlewareMixin 3. 中間寫完之後,一定要到配置檔案中註冊中介軟體 需要我們掌握的 ''' 1. process_request 請求來的時候會走 2. process_response 請求走的時候會走 ''' from django.shortcuts import render, HttpResponse from django.utils.deprecation import MiddlewareMixin class Mydd1(MiddlewareMixin): def process_request(self, request): print('第一個process_request') return HttpResponse('第一個process_request') def process_response(self, request, response): print('第一個process_response') return response # 必須要返回一個response物件 class Mydd2(MiddlewareMixin): def process_request(self, request): print('第二個process_request') def process_response(self, request, response): print('第二個process_response') return response # 必須要返回一個response物件
csrf跨站請求
# 背景:
釣魚網站
'''
英語4級報名網站為例
你要在這個網站要付費,你去的這個網站是一個冒牌的網站,他就去冒牌網站裡面付費了,前付到了冒牌網站,沒有報名成功。
'''
他會出現在form表單中,action引數:朝後端傳送的地址
# 怎麼解決這個問題?
# csrf是針對與post請求的才會做驗證
'''token相關的,一般都是一個串,祕鑰, 私鑰,公鑰'''
# 兩種解決方式
{#data:{'a':1, 'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()},#}
data:{'a':1, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
csrf相關裝飾器
'''
如果使用中介軟體限制的話,他就會限制全域性的,要麼全部限制,要麼全部不限制
只有index函式需要驗證,其他的不需要驗證
我只想讓home函式不驗證,其他的都需要驗證
'''
提供了2個裝飾器
csrf_protect: 需要驗證
csrf_exempt:不需要驗證
'''
按照FBV和CBV的使用即可
'''
from django.views.decorators.csrf import csrf_exempt,csrf_protect
'''
針對CBV:
csrf_protect的三種方式都是可以的
csrf_exempt前兩種方式都不行,只有第三種方式可以的
'''
Auth模組
# 遷移資料庫會有一個表生成,auth_user
# django專案建立完後之後,會有一個預設的路由,admin/
# admin/是django預設提供的後臺管理介面
訪問admin/登入參照的資料就是從auth_user表中來,前提是必須是超級管理員
# 如何建立超級管理員?
python3 manage.py createsuperuser