一、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 無(wú)狀態(tài) :請(qǐng)求一次扬卷,返回對(duì)應(yīng)的響應(yīng),稱為一次會(huì)話
會(huì)話技術(shù):實(shí)現(xiàn)狀態(tài)保持
為什么要使用會(huì)話保持酸钦?
在一定時(shí)間段或操作中怪得,跟蹤請(qǐng)求者狀態(tài)![服務(wù)器就知道你是誰(shuí)]
github HTTP卑硫,沒(méi)操作都需要輸入用戶和密碼[服務(wù)器才知道你是誰(shuí)]
- 會(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 (永不過(guò)期)
max_age = num (過(guò)期時(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è)置過(guò)期時(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: 永不過(guò)期
存儲(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' #
如果沒(méi)有密碼径筏,則不需要
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')