博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django学习手册 - cookie / session
阅读量:4682 次
发布时间:2019-06-09

本文共 5171 字,大约阅读时间需要 17 分钟。

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获取(不是绝对,底层抓包可以获取到)        获取cookierequest.COOKIESrequest.COOKIES['username']request.COOKIES.get("username")设置cookieresponse = render(request,'index.html')response = redirect("/index/")response = set_cookie("key","value")return response加盐配置:obj = HttpResponse("S")获取加盐cookieobj.set_signed_cookie("username","passwd",salt="jiayan")设置加盐cookieobj.get_signed_cookie("username",salt="jiayan")获取与设置的加盐 一定要是相同的加盐字符"""

前端:(login 页面)

    
Title

用户名: 密码:

前端:(index页面)

    
Title

欢迎登录.........

URL:

from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import urlfrom app01 import viewsurlpatterns = [    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 logdef 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")@autdef index(request):    return HttpResponse("OK")

 


 

核心 session 1.session 依赖cookie2.Session流程3.Session操作4.Session配置5.Session存储 注意!!! django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!! python manage.py makemigrations python manage.py migrate #生成随机字符串#写到用户浏览器cookie#保存到session中#在随机字符串对应的字典中设置相关内容Request.session[‘user’] = userRequest.session[‘is_login’] = TrueReturn redirect(“/index/”)#Session 获取数据Request.session[‘k1’]Request.session.get(“k1”,None)#设置数据Request.session[‘k1’] = 123Request.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传输cookieSESSION_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里)#前端:

{
{request.session.user}}

#后端def index(request):if request.session.get(“is_log,None)  return render(request,”index.html”)else:  return redirect(“/login/”)

 

Django 中默认支持session,其内部提供了5中类型的session公开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密+cookie

 

转载于:https://www.cnblogs.com/Anec/p/9586015.html

你可能感兴趣的文章
java课程课后作业190425之一维数组最大子数组—功能扩展(界面实现)
查看>>
Android开发:Eclipse+OpenCV环境搭建
查看>>
netlink--内核态与用户态通信
查看>>
shell Usage
查看>>
linux/windows 安装MySQLdb模块
查看>>
规划网站
查看>>
面向对象(基础oop)之属性与构造函数
查看>>
Linux网络栈协议无关层--BSD socket
查看>>
FZU 2202——犯罪嫌疑人——————【思维题】
查看>>
SEO知识图一
查看>>
USACO hamming
查看>>
[开源JVM] yvm - 自制Java虚拟机
查看>>
Open vSwitch安装
查看>>
HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
查看>>
document.domain 跨域问题[转]
查看>>
【Android】 No Activity found to handle Intent.
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
Struts2 Action名称的搜索顺序
查看>>
C++ sort简单用法
查看>>
Oracle分区索引
查看>>