會話技術cookie、jession
cookie
1、存資料
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登入</title> </head> <body> <form action="{% url 'day01:doloading' %}" method="get"> 賬號:<input type="text" name="username"><br /> 密碼:<input type="text" name="passwd"><br /> <input type="submit" value="登入"> </form> </body> </html>
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def loading(request): return render(request, 'loading.html') def doloading(request): username = request.GET.get('username') # 獲取輸入的使用者名稱 passwd = request.GET.get('passwd') # 獲取輸入的密碼 response = HttpResponse('登入成功') response.set_cookie('username', username) # 存使用者名稱 response.set_cookie('passwd', passwd) # 存使用者密碼 return response
格式: response.set_cookie(key,value)
通過response通知瀏覽器要儲存key,value形式的cookie
設定過期時間
預設情況下,關閉瀏覽器cookie就會過期,有時候我們需要設定過期時間: 格式: response.set_cookie(key,value,expires=值) expires=0 立馬過期 expires=None 不過期 expires= 值 單位是秒 expires=timedelta(days=值) 表示多少天后過期 hours=值 表示多少小時後過期.....
2、取資料
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
賬號:<input type="text" name="username" value="{{ username }}"><br />
密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
<input type="submit" value="登入">
</form>
</body>
</html>
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def loading(request):
username = request.COOKIES.get('username') # 獲取cookie中儲存的使用者名稱
passwd = request.COOKIES.get('passwd') # 獲取cookie中儲存的密碼
if not username:
username = ""
if not passwd:
passwd = ""
data = {
'username':username,
'passwd':passwd,
}
return render(request, 'loading.html', context=data)
def doloading(request):
username = request.GET.get('username')
passwd = request.GET.get('passwd')
response = HttpResponse('登入成功')
response.set_cookie('username', username)
response.set_cookie('passwd', passwd)
return response
格式: request.COOKIES.get(key)
注:cookie儲存資料的方式類似字典
3、刪除
def delcookie(request):
response = HttpResponse("清除成功")
response.delete_cookie('username') # 刪除儲存的使用者名稱
response.delete_cookie('passwd') # 刪除儲存的密碼
return response
格式:response.delete_cookie(key)
4、cookie中文輸入問題
可匯入json模組,
使用json.dumps(儲存的資料)存入,使用json.loads(獲取的資料)獲取資料。
如: username = json.dumps(request.GET.get('username')) 存入時使用
username = json.loads(request.COOKIES.get('username')) 取出時使用
session
1、存資料
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
賬號:<input type="text" name="username" value="{{ username }}"><br />
密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
<input type="submit" value="登入">
</form>
</body>
</html>
import json
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def loading(request):
return render(request, 'loading.html')
def doloading(request):
username = json.dumps(request.GET.get('username'))
passwd = request.GET.get('passwd')
# 使用session存資料
request.session['username'] = username # 存入使用者名稱
request.session['passwd'] = passwd # 存入密碼
return HttpResponse('登入成功')
格式: request.session[key] = value
注意:在django中儲存了一個session後,django會 自動 的生成session key,並將session key與 資料自動的儲存到 django_session
表中去,資料會自動的用base64編碼,並會自動的讓瀏覽器的cookie儲存sessionid(就是sessison key)
2、獲取資料
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
賬號:<input type="text" name="username" value="{{ username }}"><br />
密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
<input type="submit" value="登入">
</form>
</body>
</html>
import json
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def loading(request):
# 獲取session中儲存的資料
username = request.session.get('username')
passwd = request.session.get('passwd')
if not username:
username = ''
if not passwd:
passwd = ''
data = {
'username': username,
'passwd': passwd,
}
return render(request, 'loading.html', context=data)
def doloading(request):
username = json.dumps(request.GET.get('username'))
passwd = request.GET.get('passwd')
# 使用session存資料
request.session['username'] = username # 存入使用者名稱
request.session['passwd'] = passwd # 存入密碼
return HttpResponse('登入成功')
格式: value = request.session.get(key)
注意: 在django中,會 自動 的將cookie中的sessionid拿出來跟資料庫中的session key匹配,匹配成功後既可以獲取值
3、清除資料
def delsession(request):
request.session.flush() # 清除資料
return HttpResponse('清除成功')
request.session.flush() 會清除對應的cookie及session