django学习之- Cookie

Posted 十年如一..bj

tags:

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

cookie:客户端游览器上的一个文件,以键值对进行保存,类似字典{‘k‘:‘sfs‘},与服务器端没有关系,当游览器访问服务器时候,服务器会
生成一个随机字符串保存在cookie中返回给客户端,这样当客户端游览器下次访问服务器端时候,会带着这个保存了服务器端的随机字符串的
cookie访问服务器,服务器端收到请求后,经过检查此cookie已存在此随机字符串,表示此客户端为已通过认证的状态,可以直接登录。
举例:
通过帐号登录服务器后,服务器端对cookie进行username标识,等客户端下一次访问时候,服务器端先提取cookie的username,如果不为空,表示为已登录帐号
技术分享图片
def login(request)
    u = request.POST.get(name)
    # 对登录帐号进行验证,如果通过,执行下面
    res = redirect(/index)
    res.set_cookie(username,u)
    return res

在index的函数直接提取当前登录的帐号是否匹配
def index(request)
    #提取游览器中的cookie,如果不为空,表示为已登录帐号
    v = request.COOKIES.get(username)
    if not v:
        return redirect(/login)
    return render(request,index.html,{curr_name:v}
View Code
这时,页面使用{{curr_name}}可以直接获取登录帐号名称

游览器查看cookie的方法:这里的cookie可以通过游览器的“审查元素”-> "network" -> "Cookies" 看到

request.COOKIES:包含用户发来的所有数据,这个COOKIES就是一个字典,获取方法有以下2种
获取cookis,获取用户发来请求中的cookies
request.COOKIES[‘username111‘]
request.COOKIES.get(‘username111‘)

设置cookies,服务器端返回给客户端,并写入cookies
response = render(request,‘index.html‘)
response = redirect(‘/index/‘)
# 设置cookie,关闭游览器自动失效
response.set_cookie(‘key‘,‘value‘)
return response
# 设置cookies超过10秒失效,写法
response.set_cookie(‘key‘,‘value‘,max_age=10)
# 从登录10秒后失效,写法
current_time = datetime.datetime.utcnow()
current_data = current_time + datetime.timedelta(seconds=10)
response.set_cookie(‘key‘,‘value‘,expires=current_data)

rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt=‘加密盐‘,...)
参数:
key, 键
value=‘‘, 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn‘t been already.)
path=‘/‘, Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被javascript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

cookie 将字符串进行salt加解密,写法如下:
obj = HttpResponse(‘s‘)
obj.set_signed_cookie(‘username‘,‘jack‘,salt=‘adfadf‘) # 通过salt进行加密
request.get_signed_cookie(‘username‘,salt=‘adfadf‘) # 通过原来的salt进行解密

注意:获取cookies写法:request.COOKIES.get(‘名称‘) 设置cookies写法:response.set_cookie(‘key‘,‘value‘)

实例:userlist通过cookie实现页面显示数量
技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分页</title>
    <style>
        .page {
            background:#9acfea;
            padding: 5px;
            margin:5px;
        }
        .active{
            background:red;
        }
    </style>
</head>
<body>
    <ul>
        {% for i in li %}
        {% include ‘li.html‘ %}
        {% endfor %}
    </ul>
{#    {{ page_str|safe }}#}
    <div style="float: left;">
        <select id=‘ps‘ onchange="changePageSize(this);">
            <option value="10">10</option>
            <option value="50">50</option>
            <option value="100">100</option>
        </select>
    </div>
    <div style="float: left;">
        {{ page_str }}
    </div>
<script src="/static/jquery-1.12.4.min.js"></script>
<script src="/static/jquery-cookie/jquery.cookie.js"></script>
<script>
    /*select选项框修改为当前显示数量*/
    $(function () {
        var v = $.cookie(per_page_count,{path:"/ug/userlist"});
        $(#ps).val(v)
    });
    /*select选项框选择后自动刷新页面*/
    function changePageSize(ths) {
        var v = $(ths).val();
        $.cookie(per_page_count,v,{path:"/ug/userlist"});
        location.reload();
    }
</script>
</body>
</html>
View Code

 














































以上是关于django学习之- Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Django学习之manage.py使用

Django学习之三:django-admin 和 项目manage.py程序

八Django学习之urls.py详细配置规则

Django学习之middleware的使用

Django学习之 - 基础部分

Django学习之启用管理站点详解