Django視圖

一、HttpRequest對(duì)象

客戶端給服務(wù)器的請(qǐng)求對(duì)象

  • 概述

服務(wù)器接受到客戶端請(qǐng)求后,系統(tǒng)自動(dòng)創(chuàng)建的對(duì)象(視圖函數(shù)第一個(gè)參數(shù))

  • 屬性
-   path 請(qǐng)求路徑
-   method 請(qǐng)求方法
-   GET get請(qǐng)求參數(shù)
-   POST post請(qǐng)求參數(shù)
-   FILES 上傳文件
-   COOKIES cookie對(duì)象【會(huì)話技術(shù)】
-   session session對(duì)象【會(huì)話技術(shù)】
  • GET請(qǐng)求
# 參數(shù)獲取
name = request.GET.get('name')
  • POST請(qǐng)求
#參數(shù)獲取
name = request.POST.get('name')

二、HttpResponse對(duì)象

  • 概述

用于返回?cái)?shù)據(jù)給客戶端的

  • HttpResponse()
response = HttpResponse('hello')
response = HttpResponse('hello',status=200)
  • rander
response = render (request,'index.html')
response = render (request,'index.html',status=301)
  • redirect()
response = redirect('/meituan/')
  • JsonResopnse()
stu = {'name':'Tom','age':20}
response = JsonResponse(stu)

三、會(huì)話技術(shù)

  • 概述
HTTP 無狀態(tài) :請(qǐng)求一次,返回對(duì)應(yīng)的響應(yīng),稱為一次會(huì)話
會(huì)話技術(shù):實(shí)現(xiàn)狀態(tài)保持

為什么要使用會(huì)話保持?
    在一定時(shí)間段或操作中,跟蹤請(qǐng)求者狀態(tài)![服務(wù)器就知道你是誰]

github HTTP,沒操作都需要輸入用戶和密碼[服務(wù)器才知道你是誰]

  • 會(huì)話技術(shù)
cookie :客戶端會(huì)話技術(shù)
session:服務(wù)器會(huì)話技術(shù)(依托cookie)
token:手動(dòng)session

四、會(huì)話技術(shù)

  • cookie會(huì)話技術(shù)

設(shè)置cookie

max_age = 0  默認(rèn)(瀏覽器關(guān)閉失效)
max_age = None (永不過期)
max_age = num  (過期時(shí)間,單位秒)

response.set_cookie('username',user.u_name,max_age = 3600 * 24 * 3)

獲取cookie

request.COOKIE.get(key, defaultvalue=None)

刪除cookie

response.delete_cookie(key)
  • session會(huì)話技術(shù)

啟用session

在settings文件中(默認(rèn)是已經(jīng)啟用)
    INSTALLED_APPS: 'django.contrib.sessions',
    MIDDLEWARE: 'django.contrib.sessions.middleware.SessionMiddleware',

設(shè)置session

request.session['username'] = user.u_name

獲取session

username = request.session.get(user.u_name)

刪除session

方式一:sessionid標(biāo)識(shí)存儲(chǔ)在cookie
     request.delete_cookie('sessionid')
 
方式二:session 服務(wù)端會(huì)話技術(shù)
    del request.session[username]

方式三:同時(shí)刪除cookie和sesion
    request.session.flush()

設(shè)置過期時(shí)間(默認(rèn)有效時(shí)間是兩周)

set_expiry(value)
    value是整數(shù)(秒數(shù)): request.session.set_expiry(10)
    value是時(shí)間對(duì)象
    value是0: 關(guān)閉瀏覽器時(shí)失效
    value是None: 永不過期

存儲(chǔ)session的位置

- 數(shù)據(jù)庫(kù) 
    默認(rèn)存儲(chǔ)在數(shù)據(jù)庫(kù)中,在settings.py中添加 
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' 
- 緩存 
    只存儲(chǔ)在本地內(nèi)容中,如果丟失不能找回,但速度會(huì)比在數(shù)據(jù)庫(kù)中快 
    SESSION_ENGINE = django.contrib.sessions.backends.cache' 
- 數(shù)據(jù)庫(kù)和緩存 
    有限從本地緩存中讀取,讀取不到再去數(shù)據(jù)庫(kù)中獲取 
    SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

使用redis緩存session

-安裝redis: pip3 install django-redis-sessions
- 在settings.py中添加
     # redis服務(wù)相關(guān)信息 SESSION_ENGINE = 'redis_sessions.session'
     SESSION_REDIS_HOST = 'localhost'
     SESSION_REDIS_PORT = 6379
     SESSION_REDIS_DB = 0 # 選擇數(shù)據(jù)庫(kù)
     SESSION_REDIS_PASSWORD = '123456' #
     如果沒有密碼,則不需要
     SESSION_REDIS_PREFIX = 'session' # 前綴
- 使用時(shí)還需要啟動(dòng)redis
    redis-server
  • token會(huì)話技術(shù)
在models.py中生成token
    token = models.CharField(max_length=100, null=Ture, default='')

MD5加密函數(shù)

def password_sec(password):
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    return md5.hexdigest()

tokeen 唯一標(biāo)識(shí)

def generate_token():
    token = str(time.time())+str(random.random)
    
    md5 = hashlib.md5()
    md5.update(token.encode('utf-8'))
    return md5.hexdigest()

將token給客戶端

response.set_cookie('utoken',user.token)

獲取token

token = request.COOKIES.get('token')

刪除token

response.delete_cookie('token')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、視圖概述 Django用視圖這個(gè)概念封裝處理用戶請(qǐng)求并返回響應(yīng)的邏輯。定義視圖函數(shù)相關(guān)的URL(網(wǎng)址) (即規(guī)...
    EndEvent閱讀 1,773評(píng)論 0 2
  • Session流程圖 應(yīng)用 對(duì)于敏感、重要的信息,建議要儲(chǔ)在服務(wù)器端,不能存儲(chǔ)在瀏覽器中,如用戶名、余額、等級(jí)、驗(yàn)...
    IT的咸魚閱讀 1,003評(píng)論 0 1
  • 模塊間聯(lián)系越多,其耦合性越強(qiáng),同時(shí)表明其獨(dú)立性越差( 降低耦合性,可以提高其獨(dú)立性)。軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,237評(píng)論 0 8
  • 狀態(tài)保持 http協(xié)議是無狀態(tài)的:每次請(qǐng)求都是一次新的請(qǐng)求,不會(huì)記得之前通信的狀態(tài) 客戶端與服務(wù)器端的一次通信,就...
    lyh165閱讀 217評(píng)論 0 0
  • 遇見一個(gè)打著油紙傘的姑娘。
    路燈不比星星亮閱讀 192評(píng)論 0 1

友情鏈接更多精彩內(nèi)容