Django之cookie

Posted 月夜夕烧雾雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之cookie相关的知识,希望对你有一定的参考价值。

1.cookie是个啥?

  cookie是本地浏览器上保存的一个文件,使用键值对的形式保存数据(字典,key和value)

  账户验证成功之后,服务器端向客户端发送一段字符串,当用户再次登录的时候,服务器端不会再一次验证账户密码是否正确,而是会查看是否有这一段字符串,如果有的话,服务器端会直接跳转到登陆成功的页面

 

2.简单的cookie验证实例:

  views.py:

user_info={
    \'user1\':{\'pwd\':\'123\'},
    \'user2\':{\'pwd\':\'321\'},
}                  #为了方便,直接将数据库的内容写入字典里

def login(request):
    if request.method==\'GET\':
        return render(request,\'login.html\')
    if request.method==\'POST\':
        u=request.POST.get(\'username\')
        p=request.POST.get(\'pwd\')
        dic=user_info.get(u)         #字典的get方法,查找key值,存在返回value,否则返回none
        if dic and dic[\'pwd\']==p:      #验证正确后,给客户端发送cookie
            res=redirect(\'/index/\')
            res.set_cookie(\'uname\',u)
            return res
        else:
            return render(request,\'login.html\',{\'error_msg\':"invalid"})


def index(request):
    user=request.COOKIES.get(\'uname\')   #当你再次登录的时候,后端会获取你的cookie(uname),如果有的话,
    if not user :                说明是登录过的,可以直接登录,否则密码验证登录
        return redirect(\'/login/\')
    else:
        return render(request,\'index.html\',{\'username\': user})

  login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <div>
        <form action="/login/" method="POST">
            <input name="username" type="text" placeholder="用户名"/>
            <input name="pwd" type="password" placeholder="密码"/>
            <input type="submit" value="登录"/>
        </form>
        {{ error_msg }}
    </div>
</body>
</html>
View Code

  index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    {{ username }}
</body>
</html>
View Code

url里记得添加路由,不在赘述。

  这样就成功的在本地浏览器存入了cookie,可以通过chrome查看到:

 

 

 

 

 

 

 

 

 

 

3.cookie的设置:

  上面代码中的  res.set_cookie(\'uname\',u)  是啥意思?这是cookie的操作之一,接下来简单的介绍一下cookie的设置。

  

   #后面不加任何参数,关闭浏览器后失效
   res.set_cookie(\'uname\',u)
   #超时时间,超过之后失效
   res.set_cookie(\'uname\',\'value\',max_age=5) #截止时间失效 res.set_cookie(\'uname\',\'value\',expires=5) #在网站的所有url里都可以获取到cookie, 如果path=\'/index/\',则只有index这个网页可以获取 res.set_cookie(\'uname\', \'value\', path=\'/\') #生效的域名 res.set_cookie(\'uname\', \'value\', domain=None) # httponly=False只能http协议传输,无法被javascript获取(不是绝对,底层抓包可以获取到也可以被覆盖) res.set_cookie(\'uname\', \'value\', httponly=False)

  获取cookie:

1     #用户发送数据是的全部cookie(字典形式)
2     request.COOKIES
3     #获取方式
4     request.COOKIES[\'uname\'] 
5     request.COOKIES.get(\'uname\')

  cookie加密生成和获取

    #salt是加密盐,需要相同
    res.set_signed_cookie(\'uname\',\'user1\',salt="qwer") 
    request.get_signed_cookie(\'uname\',salt=\'qwer\')

 

以上是关于Django之cookie的主要内容,如果未能解决你的问题,请参考以下文章

Django之cookie验证

Django之Cookie

Django之Session与Cookie

Django之cookie

Django之Cookie

Django框架基础之COOKIE