Python後臺開發Django(會話控制)

頁面跳轉

頁面跳轉的url中必須在最後會自動添加【\】,因此在urls.py的路由表中須要對應添加【\】html

from django.shortcuts import redirect #導入
return redirect("admin/") #本地頁面跳轉
return redirect("https://www.cnblogs.com/dongxiaodong/") #其餘網站跳轉

本地跳轉須要參考urls.py的路由表python

urlpatterns = [
    path('admin/', admin.site.urls),
    path("dong/",views.homex),#添加URL對應關係
]

Cookie

設置cookiedjango

 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

Cookie加密session

retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字符串(密文)") #cookie經過密文加密
dnamex3 = requestx.get_signed_cookie("dong3", salt="對應設置cookie時的密文")  # 獲取cookie

Session

依賴於cookie的sessionid的隨機字符串,默認超時時間爲瀏覽器不退出狀況下的兩週或者瀏覽器退出就當即失效函數

設置post

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):
 4     def process_request(self,requestx):
 5         print("dong1111111")
 6         print("你的設備基本信息:", requestx.environ.get("HTTP_USER_AGENT", "w"))
 7         print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w"))
 8 #自定義中間件2
 9 class Dong2(MiddlewareMixin):
10     def process_request(self,requestx):
11         print("dong22222222")
12         if requestx.GET.get("idx") != "4":
13             # 返回字符串,以此爲終點,中斷全部
14             from django.shortcuts import HttpResponse
15             return HttpResponse("東小東【請求失敗】")

在setting的MIDDLEWARE = [ ]的最後添加,添加規則爲前面的先被執行

'dongjg.ruledong.Dong1',
'dongjg.ruledong.Dong2',
相關文章
相關標籤/搜索