Python後臺開發Django(會話控制)
頁面跳轉
頁面跳轉的url中必須在最後會自動新增【\】,所以在urls.py的路由表中需要對應新增【\】
from django.shortcuts import redirect #匯入 return redirect("admin/") #本地頁面跳轉 return redirect("https://www.cnblogs.com/dongxiaodong/") #其他網站跳轉
本地跳轉需要參考urls.py的路由表
urlpatterns = [ path('admin/', admin.site.urls), path("dong/",views.homex),#新增URL對應關係 ]
Cookie
設定cookie
1 # 本地頁面跳轉 2 from django.shortcuts import redirect# 匯入 3 retx = redirect("dong/") 4 # 返回檔案,並匹配值 5 from django.shortcuts import render #匯入 6 retx= render(requestx, "loginx.html",{"dongkk1":"替換值1","dongkk2":"替換值2"}) 7 #返回字串 8 from django.shortcuts import HttpResponse 9 retx=HttpResponse("東小東【dongxiaodong】") 10 #設定cookie 11 retx.set_cookie("dname", "dongxiaodong") 12 retx.set_cookie("dname2", "dongxiaodongxx",max_age=100)#設定超時時間,單位為秒 13 14 return retx
獲取cookie
dnamex=requestx.COOKIES.get("dname")
刪除
設定cookie的超時時間為過去時間即可
Cookie加密
retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字串(密文)") #cookie通過密文加密 dnamex3 = requestx.get_signed_cookie("dong3", salt="對應設定cookie時的密文")# 獲取cookie
Session
依賴於cookie的sessionid的隨機字串,預設超時時間為瀏覽器不退出情況下的兩週或者瀏覽器退出就立即失效
設定
requestx.session["dongss"]="dongxiaodongsss" requestx.session.set_expiry(60*60)#設定超時時間,單位為秒
獲取
dnamex = requestx.session["dongss"] dnamex = requestx.session.get("dongss")#無該鍵時程式不會報錯 ssid = requestx.session.session_key #得到sessionid,值與cookie儲存的相同
刪除
del requestx.session["dongss"] requestx.session.clear() #清空所有session
相關配置(setting.py)
1 SESSION_COOKIE_NAME="sessionid"# Session的cookie儲存在瀏覽器上時的key,即:sessionid=隨機字串(預設) 2 SESSION_COOKIE_PATH="/"# Session的cookie儲存的路徑(預設) 3 SESSION_COOKIE_DOMAIN = None# Session的cookie儲存的域名(預設) 4 SESSION_COOKIE_SECURE = False# 是否Https傳輸cookie(預設) 5 SESSION_COOKIE_HTTPONLY = True# 是否Session的cookie只支援http傳輸(預設) 6 SESSION_COOKIE_AGE = 1209600# Session的cookie失效日期(2周)(預設) 7 SESSION_EXPIRE_AT_BROWSER_CLOSE = False# 是否關閉瀏覽器使得Session過期(預設) 8 # 是否每次請求都儲存Session,預設修改之後才儲存(預設) 9 #如果SESSION_SAVE_EVERY_REQUEST = True時,可以配合requestx.session.set_expiry(60*60),實現無操作一分鐘後頁面session清除,頁面失效 10 SESSION_SAVE_EVERY_REQUEST = False
中介軟體
所有的請求都會先進入中介軟體處理,執行完所有中介軟體(MIDDLEWARE = [ ])才會進入urls.py進行路由,然後進入對應的APP的views.py中執行邏輯處理,中介軟體可以獲取到請求的任意資料,可以做一些IP黑名單等處理
CSR保護
Post提交資料時,Django自動會進行CSR驗證,在POST提交資料端需要提交一條隨機字串,伺服器會匹配其的內容
設定是否需要全域性csr保護
全域性設定:
需要在setting.py設定MIDDLEWARE = [ ],
如果註釋【'django.middleware.csrf.CsrfViewMiddleware',】則表示不用驗證,反之
部分設定(優先順序高):
在APP對應views.py下新增函式裝飾器即可實現
from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect#強制新增保護 def xx1(requestx): pass @csrf_exempt#強制取消保護 def xx2(requestx): pass
Form表單裡的post請求:
<form action="" method="post"> {% csrf_token %} <input type="text" name="xx"> <input type="submit" value="提交了"> </form>
Ajax裡的post請求,需要獲取cookie的csrf值,並以請求頭的方式傳送到伺服器
headers:{"X-CSRFtoken":$.cookie("csrftoken")},
新增中介軟體
在工程下建立任意名字的資料夾,然後在資料夾中建立任意名字的python檔案,如在工程同名目錄下建立ruledong.py檔案:
1 from django.utils.deprecation import MiddlewareMixin 2 #自定義中介軟體1 3 class Dong1(MiddlewareMixin): 4def process_request(self,requestx): 5print("dong1111111") 6print("你的裝置基本資訊:", requestx.environ.get("HTTP_USER_AGENT", "w")) 7print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w")) 8 #自定義中介軟體2 9 class Dong2(MiddlewareMixin): 10def process_request(self,requestx): 11print("dong22222222") 12if requestx.GET.get("idx") != "4": 13# 返回字串,以此為終點,中斷所有 14from django.shortcuts import HttpResponse 15return HttpResponse("東小東【請求失敗】")
在setting的MIDDLEWARE = [ ]的最後新增,新增規則為前面的先被執行
'dongjg.ruledong.Dong1', 'dongjg.ruledong.Dong2',