Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn)
頁面跳轉(zhuǎn)
頁面跳轉(zhuǎn)的url中必須在最后會(huì)自動(dòng)添加【\】,所以在urls.py的路由表中需要對(duì)應(yīng)添加【\】
from django.shortcuts import redirect #導(dǎo)入 return redirect("admin/") #本地頁面跳轉(zhuǎn) return redirect("https://www.cnblogs.com/dongxiaodong/") #其他網(wǎng)站跳轉(zhuǎn)
本地跳轉(zhuǎn)需要參考urls.py的路由表
urlpatterns = [ path('admin/', admin.site.urls), path("dong/",views.homex),#添加URL對(duì)應(yīng)關(guān)系 ]
Cookie
設(shè)置 cookie
# 本地頁面跳轉(zhuǎn) from django.shortcuts import redirect # 導(dǎo)入 retx = redirect("dong/") # 返回文件,并匹配值 from django.shortcuts import render #導(dǎo)入 retx= render(requestx, "loginx.html",{"dongkk1":"替換值1","dongkk2":"替換值2"}) #返回字符串 from django.shortcuts import HttpResponse retx=HttpResponse("東小東【dongxiaodong】") #設(shè)置cookie retx.set_cookie("dname", "dongxiaodong") retx.set_cookie("dname2", "dongxiaodongxx",max_age=100)#設(shè)置超時(shí)時(shí)間,單位為秒 return retx
獲取cookie
dnamex=requestx.COOKIES.get("dname")
刪除
設(shè)置cookie的超時(shí)時(shí)間為過去時(shí)間即可
Cookie加密
retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字符串(密文)") #cookie通過密文加密 dnamex3 = requestx.get_signed_cookie("dong3", salt="對(duì)應(yīng)設(shè)置cookie時(shí)的密文") # 獲取cookie
Session
依賴于cookie的sessionid的隨機(jī)字符串,默認(rèn)超時(shí)時(shí)間為瀏覽器不退出情況下的兩周或者瀏覽器退出就立即失效
設(shè)置
requestx.session["dongss"]="dongxiaodongsss" requestx.session.set_expiry(60*60)#設(shè)置超時(shí)時(shí)間,單位為秒
獲取
dnamex = requestx.session["dongss"] dnamex = requestx.session.get("dongss")#無該鍵時(shí)程序不會(huì)報(bào)錯(cuò) ssid = requestx.session.session_key #得到sessionid,值與cookie保存的相同
刪除
del requestx.session["dongss"] requestx.session.clear() #清空所有session
相關(guān)配置(setting.py)
SESSION_COOKIE_NAME="sessionid" # Session的cookie保存在瀏覽器上時(shí)的key,即:sessionid=隨機(jī)字符串(默認(rèn)) SESSION_COOKIE_PATH="/" # Session的cookie保存的路徑(默認(rèn)) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默認(rèn)) SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(默認(rèn)) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(默認(rèn)) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默認(rèn)) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關(guān)閉瀏覽器使得Session過期(默認(rèn)) # 是否每次請求都保存Session,默認(rèn)修改之后才保存(默認(rèn)) #如果SESSION_SAVE_EVERY_REQUEST = True時(shí),可以配合requestx.session.set_expiry(60*60),實(shí)現(xiàn)無操作一分鐘后頁面session清除,頁面失效 SESSION_SAVE_EVERY_REQUEST = False
中間件
所有的請求都會(huì)先進(jìn)入中間件處理,執(zhí)行完所有中間件(MIDDLEWARE = [ ])才會(huì)進(jìn)入urls.py進(jìn)行路由,然后進(jìn)入對(duì)應(yīng)的APP的views.py中執(zhí)行邏輯處理,中間件可以獲取到請求的任意數(shù)據(jù),可以做一些IP黑名單等處理
CSR保護(hù)
Post提交數(shù)據(jù)時(shí),Django自動(dòng)會(huì)進(jìn)行CSR驗(yàn)證,在POST提交數(shù)據(jù)端需要提交一條隨機(jī)字符串,服務(wù)器會(huì)匹配其的內(nèi)容
設(shè)置是否需要全局csr保護(hù)
全局設(shè)置:
需要在setting.py設(shè)置MIDDLEWARE = [ ],
如果注釋【'django.middleware.csrf.CsrfViewMiddleware',】則表示不用驗(yàn)證,反之
部分設(shè)置(優(yōu)先級(jí)高):
在APP對(duì)應(yīng)views.py下添加函數(shù)裝飾器即可實(shí)現(xiàn)
from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect #強(qiáng)制添加保護(hù) def xx1(requestx): pass @csrf_exempt #強(qiáng)制取消保護(hù) 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值,并以請求頭的方式發(fā)送到服務(wù)器
headers:{"X-CSRFtoken":$.cookie("csrftoken")},
添加中間件
在工程下建立任意名字的文件夾,然后在文件夾中建立任意名字的python文件,如在工程同名目錄下建立ruledong.py文件:
from django.utils.deprecation import MiddlewareMixin #自定義中間件1 class Dong1(MiddlewareMixin): def process_request(self,requestx): print("dong1111111") print("你的設(shè)備基本信息:", requestx.environ.get("HTTP_USER_AGENT", "w")) print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w")) #自定義中間件2 class Dong2(MiddlewareMixin): def process_request(self,requestx): print("dong22222222") if requestx.GET.get("idx") != "4": # 返回字符串,以此為終點(diǎn),中斷所有 from django.shortcuts import HttpResponse return HttpResponse("東小東【請求失敗】")
在setting的MIDDLEWARE = [ ]的最后添加,添加規(guī)則為前面的先被執(zhí)行
'dongjg.ruledong.Dong1', 'dongjg.ruledong.Dong2',
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 深入探究Django中的Session與Cookie
- Django中的cookie與session操作實(shí)例代碼
- Django項(xiàng)目開發(fā)中cookies和session的常用操作分析
- django框架之cookie/session的使用示例(小結(jié))
- django進(jìn)階之cookie和session的使用示例
- Django組件之cookie與session的使用方法
- Django 中 cookie的使用
- 詳解Python的Django框架中的Cookie相關(guān)處理
- 在Django的session中使用User對(duì)象的方法
- 在Python的Django框架的視圖中使用Session的方法
- Django框架會(huì)話技術(shù)實(shí)例分析【Cookie與Session】
相關(guān)文章
Python非單向遞歸函數(shù)如何返回全部結(jié)果
這篇文章主要介紹了Python非單向遞歸函數(shù)如何返回全部結(jié)果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12用Python的Django框架來制作一個(gè)RSS閱讀器
這篇文章主要介紹了用Python的Django框架來制作一個(gè)RSS閱讀器,通過url feeds來制作訂閱類應(yīng)用同樣是Django之所長,需要的朋友可以參考下2015-07-07python 獲取字典鍵值對(duì)的實(shí)現(xiàn)
這篇文章主要介紹了python 獲取字典鍵值對(duì)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之哈夫曼樹篇
這篇文章主要給大家介紹了關(guān)于Python描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之哈夫曼樹篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09時(shí)間序列預(yù)測中的數(shù)據(jù)滑窗操作實(shí)例(python實(shí)現(xiàn))
滑動(dòng)窗口操作非常普遍,非常有用,它們也很容易在Python中實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于時(shí)間序列預(yù)測中的數(shù)據(jù)滑窗操作python實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-03-03Python 模擬員工信息數(shù)據(jù)庫操作的實(shí)例
下面小編就為大家?guī)硪黄狿ython 模擬員工信息數(shù)據(jù)庫操作的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10