日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django框架详细介绍---cookie、session、自定义分页

發布時間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django框架详细介绍---cookie、session、自定义分页 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.cookie

  在HTTP協議介紹中提到,該協議是無狀態的,也就是每次請求都是獨立的,它的執行情況和結果與前面的請求和之后的請求都無直接關系,它不會受前面的請求響應情況直接影響,也不會直接影響后面的請求響應情況,也就是說對于服務器而言,每次接收到的請求都是全新的,狀態可以理解為客戶端和服務器在會話中產生的數據,無狀態就是每次會話的數據都不會被保存,而在實際應用中某些特定的會話數據需保存下來,由此cookie就應運而生

  cookie具體指的事一段信息,是服務器發送過來存儲在瀏覽器上的一組鍵值對,再次訪問服務器時瀏覽器會自帶這些鍵值對,以便服務器提取需要的信息,例如進行身份驗證等

  其實現原理很簡單,也就是有服務器產生鍵值對,瀏覽器收到后保存到本地,當瀏覽器再次訪問時,瀏覽器會自帶cookie發送給服務器,服務器對收到的鍵值對進行提取和校驗等操作

  通俗的說就是保存在客戶端/瀏覽器本地的鍵值對

示例:瀏覽器中查看cookies

2.Django中實現cookie

?  1)設置cookie

def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("pwd")
user_obj = models.User.objects.filter(username=username, password=password)
if user_obj:

url = request.GET.get("next")
print(url)
rep = redirect(url)
# 設置cookie 鍵 鍵值 加鹽處理 超時時間
rep.set_signed_cookie("login", "ok", salt="jiayanchuli", max_age=10)
return rep
else:
return render(request,
"login.html",
{"err_msg": "用戶名或密碼錯誤"})

return render(request, "login.html")

?參數

  set_signed_cookie(self, key, value, salt='', **kwargs)

key              鍵 value=''           鍵值 max_age=None         超時時間 expires=None         超時時間(IE requires expires, so set it if hasn't been already.) path='/'           Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie可以被任何url的頁面訪問 domain=None Cookie生效的域名 secure=False https傳輸 httponly=False 只能http協議傳輸,無法被JavaScript獲取(不是絕對,底層抓包可以獲取到也可以被覆蓋)

?  2)獲取cookie

def check_login(func):def warpper(request,*args,**kwargs):# 判斷請求里面是否存在鍵值對 默認拋出異常,需指定取不到值時為空 加鹽處理login_flag = request.get_signed_cookie("login", default="", salt="jiayanchuli")if login_flag == "ok":# 已經登錄return func(request, *args, **kwargs)else:# 獲取當前訪問的URLurl = request.path_infoprint("url = request.path_info", url)return redirect("/login/?next={}".format(url))return warpper

?參數

default  默認值 salt           加鹽處理

?瀏覽器中查看超時時間

?  3)刪除cookie

def logout(request):rep = redirect("/login/")# 退出時刪除之前在瀏覽器上面設置的cooksrep.delete_cookie("login")# print(rep.cookies.get("login"))return redirect("/login/")

?3.session

  cookie雖然在一定程度上解決了“保持狀態”的需求,但由于Cookie本身最大支持4096字節,以及Cookie本身保存在客戶端,可能被攔截或竊取,因此需要類似于cookie的東西彌補這些不足,支持更多的字節,并保存在服務器,有較高的安全性,從而session就應運而生

  那么,問題來了,基于HTTP協議的無狀態特征,服務器根本就不知道訪問者是那個客戶端/瀏覽器,那么之前提到的cookie就起到橋接的作用:

  可以給每個客戶端的Cookie分配一個唯一的id,這樣客戶端/瀏覽器在訪問時,通過cookie,服務器就知道來訪問的是誰,然后再根據不同的cookie的id,在服務器上保存一段時間的私密資料,如“賬號密碼”等

總結而言:cookie彌補了HTTP無狀態的不足,使得服務器端可以區別出訪問者,但cookie以文本的形式保存在本地,自身安全性較低,所以就通過cookie識別不同的用戶,對應的在session里保存私密的信息以及超過4096字節的文本

應該強調的是,以上描述的cookie和session是共通性的東西,不限于語言和框架

4.Django中session相關方法

# 獲取、設置、刪除Session中數據 request.session['key'] request.session.get('kkey',None) request.session['key'] = value request.session.setdefault('key',value) # 存在則不設置 del request.session['key']# 所有 鍵、值、鍵值對 request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems()# 會話session的key request.session.session_key# 將所有Session失效日期小于當前日期的數據刪除 request.session.clear_expired()# 檢查會話session的key在數據庫中是否存在 request.session.exists("session_key")# 刪除當前會話的所有Session數據 request.session.delete()# 刪除當前的會話數據并刪除會話的Cookie。 request.session.flush() 這用于確保前面的會話數據不可以再次被用戶的瀏覽器訪問例如,django.contrib.auth.logout() 函數中就會調用它。# 設置會話Session和Cookie的超時時間 request.session.set_expiry(value)* 如果value是個整數,session會在些秒數后失效。* 如果value是個datatime或timedelta,session就會在這個時間后失效。* 如果value是0,用戶關閉瀏覽器session就會失效。* 如果value是None,session會依賴全局session失效策略。

?  1)解析流程

5.Django中實現session認證登錄

def check_login(func):def warpper(request, *args, **kwargs):# 判斷session是否存在鍵值對login_flag = request.session.get("login", None)if login_flag == "login":# 已經登錄return func(request, *args, **kwargs)else:# 獲取當前訪問的URLurl = request.path_infoprint("url = request.path_info", url)return redirect("/login/?next={}".format(url))return warpper 認證裝飾器 def login(request):if request.method == "POST":username = request.POST.get("username")password = request.POST.get("pwd")user_obj = models.User.objects.filter(username=username, password=password)if user_obj:url = request.GET.get("next")print(url)rep = redirect(url)# 認證成功,設置session# 1. 生成隨機字符串(口令),給瀏覽器返回# 2. 在服務端開辟一塊空間,用來保存對應的session數據(大字典)# 3. 在服務端開辟的空間中保存需要保存的鍵值對數據request.session["login"] = "login"request.session["username"] = username# request.session["pwd"] = password# 設置客戶端session保留時間 request.session.set_expiry(0)return repelse:return render(request,"login.html",{"err_msg": "用戶名或密碼錯誤"})return render(request, "login.html") 認證視圖 def logout(request):request.session.flush()return redirect("/login/")# return render(request, "home.html") 刪除session

?6.Django中的session配置

1. 數據庫Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默認)2. 緩存Session SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的緩存別名(默認內存緩存,也可以是memcache),此處別名依賴緩存的設置3. 文件Session SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir() 4. 緩存+數據庫 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎5. 加密Cookie Session SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 其他公用設置項: 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,默認修改之后才保存(默認)

?7.Django視圖中使用裝飾器

  1)FBV中使用裝飾器

  與普通函數調用裝飾器的方法一樣,在函數前使用語法  @裝飾器名  調用

@check_login def publisher_list(request):# 函數體

  2)CBV中使用裝飾器(三種方法)

from django.utils.decorators import method_decorator # 導入相關CBV調用裝飾器需要的方法

?  方法一:在CBV視圖的get或者post方法上調用

class Home(views.View):def dispatch(self, request, *args, **kwargs):return super(Home, self).dispatch(request, *args, **kwargs)@method_decorator(check_login)def get(self, request):return render(request, "home.html")def post(self, request):return render(request, "index.html")

  方法二:在dispatch方法上調用,CBV中首先執行的是該方法,所以相當于get和post都加上了裝飾器功能

class Home(views.View):@method_decorator(check_login)def dispatch(self, request, *args, **kwargs):return super(Home, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):return render(request, "index.html")

  方法三:在視圖類上直接調用,但必須傳入name關鍵字參數,指定是給哪個方法調用

@method_decorator(check_login, name="get") @method_decorator(check_login, name="post") class Home(views.View):# 函數體,同時為get和post加上裝飾器功能

  3)CSRF Token相關裝飾器(只能在dispatch上調用)

csrf_protect  為當前函數強制設置防跨站請求偽造功能,即便settings中沒有設置全局中間件 csrf_exempt   取消當前函數防跨站請求偽造功能,即便settings中設置了全局中間件 class Home(views.View):@method_decorator(csrf_protect)def dispatch(self, request, *args, **kwargs):return super(Home, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):return render(request, "index.html")

8.實現分頁

?  1)自定義分頁

?待續

  2)Django內置分頁功能

?待續

?

轉載于:https://www.cnblogs.com/mdzzbojo/p/9231857.html

總結

以上是生活随笔為你收集整理的Django框架详细介绍---cookie、session、自定义分页的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩性生活视频 | 国产成人一区在线观看 | 黄色一级生活片 | 手机在线一区二区 | 欧美人与禽zozzo性之恋的特点 | 一区二区三区影院 | 国产自在线拍 | 假日游船 | 黄色大片网 | 狠狠干狠狠爱 | 特大黑人巨交吊性xxxxhd | 亚洲aaaa级特黄毛片 | 永久中文字幕 | 亚洲av无码专区在线播放中文 | 欧美熟女一区二区 | 国产人成在线观看 | 丰满人妻av一区二区三区 | 日本色www | 国产精品亚洲自拍 | 香蕉视频二区 | 久久综合伊人77777麻豆 | 欧美日韩四区 | 粗大黑人巨茎大战欧美成人免费看 | 强制憋尿play黄文尿奴 | 欧美熟妇另类久久久久久不卡 | 精品久久中文 | 欧美美女一区二区 | 涩涩久久 | 91精品一区二区三 | 欧美整片在线观看 | 日本中文字幕影院 | 日韩不卡一区 | 中文字字幕在线中文乱码电影 | 美女被草 | 亚洲黄网在线观看 | xvideos永久免费入口 | 黄色小视频入口 | 国产六区 | 亚洲欧美变态另类丝袜第一区 | 我们俩电影网mp4动漫官网 | 玖草视频在线 | av免费看片 | 丰满人妻翻云覆雨呻吟视频 | 6080久久| 久久色av | 日日麻批 | 亚洲黄片一区二区三区 | 免费伊人网 | 欧洲女同同性吃奶 | 不卡黄色 | 国产免费黄色av | 国产页| 国产一区精品视频 | 波岛野结衣 | 公肉吊粗大爽色翁浪妇视频 | 91免费黄色 | 久久国产一级 | 成人h动漫精品一区二区器材 | 国产欧美精品一区二区色综合朱莉 | 国产一区久久 | 欧美日a | 久久久com | 久久久久久a | 在线视频一区二区三区 | 菲律宾黄色片 | 777米奇影视第四色 五月丁香久久婷婷 | 一区av在线 | 传媒av在线| 日韩大片免费观看 | 亚洲爆爽av | 日b在线观看 | 欧美日韩视频 | 欧美精品日韩在线 | 麻豆短视频 | 亚洲最大成人在线视频 | 久久精品资源 | 精品国产免费无码久久久 | 国产av剧情一区二区三区 | jvid乐乐| 深夜小视频在线观看 | 岛国精品一区二区三区 | 男生草女生视频 | 性色av蜜臀av | 日本欧美黄色 | 亚洲精品午夜国产va久久成人 | 永久看看免费大片 | 国产精品情侣 | 亚洲一二三 | 精品人妻中文无码av在线 | 国产乱子伦精品视频 | 日韩人妻无码一区二区三区 | 国产主播福利在线 | 91久| 欧美日韩一区二区三区不卡视频 | 黄色在线不卡 | 67194成人在线观看 | 国产一线二线在线观看 | 久久露脸国语精品国产 | 少妇免费看 |