django编写cookie

cookie

HTTP协议是一个无状态协议,即每一个请求都是独立的!无法记录前一次请求的状态,但HTTP会使用cookie值进行跟踪会话。在WEB开发当中,使用session来完成会话跟踪,session底层依赖于cookie技术。

其实cookies是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cookies和其他电脑上的cookies是不一样的;cookies不能被视作代码执行,也不能成为病毒,所以它对你基本无害。

在HTTP中,表示服务器对浏览器的“小甜点”。其实cookie是一个{key:value}结构,随着服务器的响应发送给客户端浏览器,然后客户端可以把cookie保存下来,当下一次访问同一服务器的时候把cookie再返回给客户端。cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。当客户端向服务器再次提交请求时,把这个cookie会一起发送过去,这样服务器就会识别到这个客户端,默认会填写一些信息,方便访问服务器。

image-20221106000457703

cookie应用

在django框架下我们简单的实现一下,代码原理如下:

我们目标是通过login视图,进行登录,然后获取到index页面。

def index(request):
        
    return render(request,"index.html")


def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "regina" and pwd == "127717":

            return redirect("/index")
        else:
            return render(request,"login.html")

但是现在问题存在于,我们直接去访问index页面也是可以获取到的,从而就绕过了login的验证

image-20221106105610796所以希望可以存在一个东西,在访问index页面时可以验证是否有登录,如果没有登录就访问,服务器就需要把他返回到login页面,如果有就展示index页面

def index(request):
    print(request.COOKIES.get("is_login"))
    is_login = request.COOKIES.get("is_login")
    if is_login == "true":
        return render(request,"index.html")
    else:

        return redirect("/login")


def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    else:
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        if user == "regina" and pwd == "127717":
            #登陆成功时,再写cookie
            res = HttpResponse("登录成功")
            res.set_cookie("is_login","true")

            return res
        else:
            return render(request,"login.html")

image-20221106110455600

salt值

上述例子可以看出来,cookie值存放的很简单,这就使得有很大的风险被盗取cookie,因此我们引入一个摘要值salt

res.set_signed_cookie("is_login","true",salt="20000127")

服务器端接收的时候也需要改一下接收语句

is_login = request.get_signed_cookie("is_login",salt="20000127")

image-20221106174052845

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django编写cookie - Python技术站

(0)
上一篇 2023年4月2日 下午4:30
下一篇 2023年4月2日

相关文章

  • django学习_路由

    django2 路由控制器 Route路由,是一种映射关系。路由是把客户端请求的url路径和用户请求的应用程序,这里意指django里面的视图进行绑定映射的一种关系。 请求路径和视图函数不是一一对应的关系 在django中所有的路由最终都被保存到一个叫urlpatterns的文件里,并且该文件必须在主应用下的urls.py里进行声明,这是由setting文件…

    2023年4月2日
    00
  • Django_模型详解

    Django_模型ORM Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作。 O是object,也就类对象的意思。 R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思。 M是mapping,是映射的意思。 映射: 类:sql语句table表 类成…

    2023年4月2日
    00
  • django中间件以及自定义中间件

    middleware 中间件就是在目标和结果之间进行的额外处理过程,在Django中就是request和response之间进行的处理,相对来说实现起来比较简单,但是要注意它是对全局有效的,可以在全局范围内改变输入和输出结果,因此需要谨慎使用,否则不仅会造成难以定位的错误,而且可能会影响整体性能。 中间件有什么用 如果想要修改HttpRequest或者Htt…

    2023年4月2日
    00
  • CSRF和token以及用django实现

    csrf CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的…

    2023年4月2日
    00
  • Django_request学习

    Django_request (1)请求方式 这里使用一个接口测试软件postman 可以看到里面有非常多的发起请求的方式,最常用的就是GET和POST请求,但是这些方法无法在网页的url里显示 在学习request参数之前,django框架中首先接到浏览器发来的请求第一站是经过框架自带的wsgi.py文件 “”” WSGI config for djang…

    2023年4月2日
    00
  • matplotlib画图基础知识

    matplotlib plt.plot()绘制线性图 绘制单条线形图 绘制多条线形图 设置坐标系的比例plt.figure(figsize=(a,b)) 设置图例legend() 设置轴的标识 图例保存 fig = plt.figure() plt.plot(x,y) figure.savefig() import matplotlib.pyplot as …

    2023年4月2日
    00
  • 数据分析之pandas的使用

    pandas 为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据! 什么是pandas? 首先先来认识pandas中的两个常用…

    2023年4月2日
    00
  • ajax的请求,异步,同源策略的学习

    Ajax Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指⼀种创建交互式⽹⻚应⽤的⽹⻚开发技术。 Ajax 是⼀种⽤于创建快速动态⽹⻚的技术。 Ajax 是⼀种在⽆需重新加载整个⽹⻚的情况下,能够更新部分⽹⻚的技术。 通过在后台与服务器进⾏少量数据交换,Ajax 可以使⽹⻚实现异步…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部