当前位置: 首页 > news >正文

Django学习手册 - cookie / session

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

 

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

相关文章:

  • We are unable to complete the review of your app since one or more of your In App Purchases have not
  • IOS内存管理
  • gerrit + ldap + phpldapadmin docker部署
  • 【编程之美】2.1 - 求二进制数中1的个数
  • JavaScript中数组的排序方法:1.冒泡排序 2.选择排序
  • js计算页面加载时间
  • Solium代码测试框架
  • 迎接第五次工业革命浪潮,不当纳米知识文盲
  • 12-单表查询
  • Microsoft Component Designer 设计组件一例
  • 百度云高速下载Pandownload
  • CF卡格式化XPE启动盘
  • BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题
  • Linux 抓取网页实例(shell+awk)
  • 计算机网络--TCP三次握手和四次挥手
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android 架构优化~MVP 架构改造
  • Angular数据绑定机制
  • axios 和 cookie 的那些事
  • IDEA 插件开发入门教程
  • JAVA并发编程--1.基础概念
  • mysql_config not found
  • Python语法速览与机器学习开发环境搭建
  • unity如何实现一个固定宽度的orthagraphic相机
  • 回顾 Swift 多平台移植进度 #2
  • 基于 Babel 的 npm 包最小化设置
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 力扣(LeetCode)56
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端设计模式
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 入口文件开始,分析Vue源码实现
  • 算法系列——算法入门之递归分而治之思想的实现
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​低代码平台的核心价值与优势
  • (06)Hive——正则表达式
  • (C++20) consteval立即函数
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十八)SpringBoot之发送QQ邮件
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)大型网站架构演变和知识体系
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net framework4与其client profile版本的区别
  • .Net 代码性能 - (1)
  • .net反编译的九款神器
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @基于大模型的旅游路线推荐方案
  • [ Linux ] git工具的基本使用(仓库的构建,提交)