Python之路66-Django中的Cookie和Session

目录

一、Cookie

二、Session



一、Cookie


1.获取Cookie 

request.COOKIES["key"]

request.get_signed_cookie(key, default=RAISE_ERROR, s, max_age=None)

# 参数
# default:默认值
# salt:加密盐
# max_age:后台控制过期时间

2.设置Cookie

rep = HttpResponse(...) 或 rep = render(request, ...)

rep.set_cookie(key, value, ...)    
rep.set_signed_cookie(key, value, salt="加密盐", ...)

# 如果只有key、value默认关闭浏览器后cookie就失效了,这里可以设置以下一些参数来自定义
# 参数
# key,             键
# value="",        值
# max_age=None,    超时时间,默认秒
# expires=None,    超时时间,到什么时候截止
# path="/",        Cookie生效的路径,/表示跟路径,特殊的:跟路径的cookie可以被任何url的页面访问
# domain=None,     Cookie生效的域名
# secure=False,    https传输
# httponly=False,  只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

由于cookie保存在客户端的电脑上,所以,JavaScript和jQuery也可以操作cookie

<script src="/static/js/jquery.cookie.js"></script>
$.cookie("list_pager_num", 30, {path:"/"});

通过cookie来实现用户登录

urls.py

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘, views.login),
    url(r‘^index/‘, views.index),
]

views.py

user_info = {
    "dachengzi" : {"pwd": "123123"},
    "kangbazi": {"pwd": "kkkkkk"},
}

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("password")
        dic = user_info.get(u)
        if not dic:
            return render(request, "login.html")
        if dic["pwd"] == p:
            res = redirect("/index/")
            res.set_cookie("username", u)
            return res
        else:
            return render(request, "login.html")

def index(request):
    # 获取当前已经登录的用户名
    v = request.COOKIES.get("username")
    if not v:
        return redirect("/login")
    return render(request, "index.html", {"current_user": v})

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/login/" method="POST">
        <input type="text" name="username" placeholder="用户名"/>
        <input type="password" name="password" placeholder="密码"/>
        <input type="submit" />
    </form>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>欢迎登录,{{ current_user }}</h1>
</body>
</html>

通过cookie实现定制显示数据条目

这里引入了一个jQuery的插件

jquery.cookie.js

操作

<!--设置cookie-->
$.cookie("per_page_count", v, {path: "/user_list/"});
<!--获取cookie-->
$.cookie("per_page_count");

urls.py

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^user_list/‘, views.user_list),
]

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
# Create your views here.
from django.urls import reverse

from utils import pagination

LIST = []
for i in range(1009):
    LIST.append(i)

def user_list(request):
    current_page = request.GET.get("p", 1)
    current_page = int(current_page)

    val = request.COOKIES.get("per_page_count")
    print(val)
    if val:
        val = int(val)
        page_obj = pagination.Page(current_page, len(LIST), val)
        data = LIST[page_obj.start:page_obj.end]
        page_str = page_obj.page_str("/user_list/")
        return render(request, "user_list.html", {"li": data, "page_str": page_str})
    else:
        page_obj = pagination.Page(current_page, len(LIST))
        data = LIST[page_obj.start:page_obj.end]
        page_str = page_obj.page_str("/user_list/")
        rep = render(request, "user_list.html", {"li": data, "page_str": page_str})
        rep.set_cookie("per_page_count", "10", path="/user_list/")
        return rep

user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .pagination .page{
            display: inline-block;
            padding: 5px;
            background-color: cyan;
            margin: 5px;
        }
        .pagination .page.active{
            background-color: brown;
            color: black;
        }
    </style>
</head>
<body>
    <ul>
        {% for item in li %}
            {% include "li.html" %}
        {% endfor %}
    </ul>

    <div>
        <select id="px" onchange="changePageSize(this);">
            <option value="10">10</option>
            <option value="30">30</option>
            <option value="50">50</option>
            <option value="100">100</option>
        </select>
    </div>

    <div class="pagination">
        {{ page_str }}
    </div>
    <script src="/static/jquery-1.12.4.js"></script>
    <script src="/static/jquery.cookie.js"></script>
    <script>
        $(function () {
            var v = $.cookie("per_page_count");
            $("#px").val(v);
        });

        function changePageSize(ths) {
            var v = $(ths).val();
            $.cookie("per_page_count", v, {path: "/user_list/"});
            location.reload();
        }
    </script>
</body>
</html>


本文出自 “八英里” 博客,请务必保留此出处http://5921271.blog.51cto.com/5911271/1929633

时间: 2024-11-02 19:55:40

Python之路66-Django中的Cookie和Session的相关文章

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

Django中使用cookie和session

目录 Django中使用cookie与session 一.cookie 二.session Django中使用cookie与session 一.cookie cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了. 什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对.下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据. cookie的原理:cookie的工作原理是:

Django中的cookie和session

cookies 客户端浏览器上的一个文件 {'user':'xiaoyanzi'} 获取cookie: request.COOKIES.get('username') 写cookie: #设置cookie,关闭浏览器失效 response = render(request,'index.html') response = redirect('/index/') response.set_cookie('key','value') return response cookies参数 #cookie

Django中的cookie与session

cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来自同一人的连续请求.上图很明显的展示了Django的session与cookie的实现原理.服务器会生成两份相同的cookie字符串,一份保存在本地,一份发向求情的浏览器.浏览器将收到的cookie字符串保存下来,当下次再请求时,会将这段cookie发送到服务器,服务器得到这段cookie会与本地保

django 中的cookie和session

cookie: 1,cookie是什么? cookie是服务器让浏览器保存在浏览器上的一组键值对 2,为什么要有cookie? http 是无状态,每次请求之间没有任何关系,无法保持状态 3,cookie的特点: 1,服务器让浏览器设置的 2,设置之后每次访问相同的页面带上cookie 4,django中的操作cookie 1,设置cookie rep = redirect('/idnex/') rep.set_cookie(key,value,max_age=1000) rep.set_sig

Django 中的 Cookie 和 Session

Cookie 设置Cookie: rep = render(request, '.html') rep.set_cookie(key, value) rep.set_signed_cookie(key, value, salt='') # 参数: key: value='', max_age=None, 超时时间,不设置超时时间,则表示关闭浏览器自动清除 expires=None, 超时时间 path='/', Cookie生效的路径('/'表示根目录,根目录的Cookie可以被任何url的页面

Python之路,Day16 - Django 进阶

Python之路,Day16 - Django 进阶 本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproject.com/en/1.9/topics/pagination/ 自定义template tags https://docs.djangoproject.com/es/1.9/howto/custom-template-tags/ 权限管理 django 自带有基本的权限管理 ,但粒度和限制权限的维度

Python之路,Day15 - Django适当进阶篇

Python之路,Day15 - Django适当进阶篇 本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣和效率最高的,今天就来基于下面的需求来继续学习Django 项目需求: 1.分讲师\学员\课程顾问角色,2.学员可以属于多个班级,学员成绩按课程分别统计3.每个班级至少包含一个或多个讲师4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员5.客户要有咨询纪录, 后续的定期跟踪纪录也要保存6

django框架中的cookie与session

cookie因为http是一个无状态协议,无法记录用户上一步的操作,所以需要状态保持.cookie和session的区别:1.cookie是保存在浏览器本地的,所以相对不安全.cookie是4k的大小,最多保存20条(因为最原始的浏览器的本地是很小的,只是一个历史数据,但是其实是不精确的),默认的过期时间是14天.2.session是保存在服务器的,是相对安全的,session依赖于cookie,sessionid保存在cookie中,理论上无大小限制.3.相同点:都是实现状改保持,都是有服务器

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信