cookie
""" cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,salt="加密盐",....) 参数: key 键 value=“” 值 max_age=None 超时时间 expires=None 超时日期 path="/" cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问 domain=None cookie生效的域名 secure=False https传输 httponly=False 只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到) 获取cookie request.COOKIES request.COOKIES['username'] request.COOKIES.get("username") 设置cookie response = render(request,'index.html') response = redirect("/index/") response = set_cookie("key","value") return response 加盐配置: obj = HttpResponse("S") 获取加盐cookie obj.set_signed_cookie("username","passwd",salt="jiayan") 设置加盐cookie obj.get_signed_cookie("username",salt="jiayan") 获取与设置的加盐 一定要是相同的加盐字符 """
前端:(login 页面)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> <form action="/login/" method="post"> <p> <span>用户名:</span> <input type="text" name="user"> <span>密码:</span><input type="password" name="pwd"> <input type="submit" value="提交"> </p> </form> </div> </body> </html>
前端:(index页面)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1> 欢迎登录......... </h1> </body> </html>
URL:
from django.contrib import admin from django.urls import path from django.conf.urls import url from app01 import views urlpatterns = [ path('admin/', admin.site.urls), url('^login/', views.login), url('^index/', views.index), ]
后端:
from django.shortcuts import render,HttpResponse,redirect # Create your views here. def login(request): print(request.COOKIES) print(request.session) if request.method == "POST": u = request.POST.get("user",None) p= request.POST.get("pwd",None) if u == "root" and p == "123": # cookie的方式: # ret = redirect("/index/") # #设置cookie数值 # ret.set_cookie("name","123",10) # return ret #session方式 request.session["info_login"]=True request.session["user"] = u return redirect("/index/") else: redirect("/login/") return render(request,"login.html") def index(request): #cookie # if request.COOKIES.get("name",None): # print("index") # return render(request,"index.html") #session if request.session.get("info_login",None): name = request.session.get("user") return render(request,"index.html") #session 默认存放在数据库中。 else: return redirect("/login/")
--------------------------------------------------------------------------------------------------------------------------------------------------------
装饰器的方式:
from django.shortcuts import render,redirect,HttpResponse # Create your views here. def aut(fum): def log(request,*args,**kwargs): if request.COOKIES.get("user",None): return fum(request,*args,**kwargs) else: return redirect("/login/") return log def login(request): if request.method == "POST": u = request.POST.get("user", None) p = request.POST.get("pwd", None) if u == "root" and p == "123": ret = redirect("/index/") # ret.set_cookie("user", u) ret.set_signed_cookie("user",u,salt="abcd") return ret else: return redirect("/login/") return render(request,"login.html") @aut def index(request): return HttpResponse("OK")
核心 session 1.session 依赖cookie 2.Session流程 3.Session操作 4.Session配置 5.Session存储
注意!!!
django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
python manage.py makemigrations
python manage.py migrate
#生成随机字符串 #写到用户浏览器cookie #保存到session中 #在随机字符串对应的字典中设置相关内容 Request.session[‘user’] = user Request.session[‘is_login’] = True Return redirect(“/index/”) #Session 获取数据 Request.session[‘k1’] Request.session.get(“k1”,None) #设置数据 Request.session[‘k1’] = 123 Request.session.setdefault(“k1”,123) #存在则不设置 #删除数据 Del request.session[‘k1’] Request.session.clear() Request.session.delete(‘session_key’ ) #所有键值,键值对 Request.session.keys() Request.session.values() Request.session.items() Request.session.iterkeys() Request.session.itervalues() Request.session.iteritems() #用户session的随机字符串 Request.session.session_key #将所有session失效时间小于当前日期的数据删除 Request.session.clear_expired() #检查用户session的随机字符串在数据中是否 Request.session.exists(“session_key”) #删除当前用户的所有session数据 Request.session.delete(“session_key”) Request.session.set_expiry(value) *如果value是个整数,session会在些秒数后失效。 *如果是value是个datatime或timedelta,session就会在这个时间后失效 *如果value是0,用户关闭浏览器session就会失效。 *如果value是None,session会依赖全局session失效策略 #在setting里面设置 SESSION_COOKIE_NAME = “sessionid” #session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = ‘/’ #session 的cookie 保存的路径(默认) SESSION_COOKIE_DOMAIN=None #session 的cookie 保存的域名(默认) SESSION_COOKIE_SECURE=False #是否HTTP传输cookie SESSION_COOKIE_HTTPONLY=True #是否session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 #失效日期2周默认 SESSION_COOKIE_AT_BROWSER_CLOSE=False #是否关闭浏览器使得session过期 SESSION_SAVE_EVERY_REQUEST=False #是否每次请求都保存session,默认修改之后才保存
session数据可以在request中提取到,所以后端不必传值。
#用session 传递数据至前端(session数据封装在request里) #前端: <span> <h3>{{request.session.user}}</h3> </span> #后端 def index(request): if request.session.get(“is_log,None) return render(request,”index.html”) else: return redirect(“/login/”)
Django 中默认支持session,其内部提供了5中类型的session公开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存+数据库
- 加密+cookie