28.Django cookie
概述
1.获取cookie
request.COOKIES['key']
request.COOKIES.get('key')
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
2.设置cookie
rep = HttpResponse(...) 或 rep = render(request, ...) #return的对象 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传输改为True
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖
# max_age 10秒失效
result.set_cookie('username',u,max_age=10) # expires 设置失效日期
import datetime
current_date = datetime.datetime.utcnow()
current_date = current_date + datetime.timedelta(seconds=5)
result.set_cookie('username',u,expires=current_date) # 加密
obj = HttpResponse('s')
obj.set_signed_cookie('username',"kangbazi",salt="asdfasdf")
request.get_signed_cookie('username',salt="asdfasdf")
用户登录
利用cookie做用户登录,只有登录成功才能进入后台界面
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="/login/" method="POST">
<input type="text" name="username" placeholder="用户名" />
<input type="password" name="pwd" 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>
views.py
from django.shortcuts import render,HttpResponse,redirect
from django.core.handlers.wsgi import WSGIRequest
from django.utils.safestring import mark_safe user_info = {
'derek':{'pwd':''},
'jack':{'pwd':''}
} 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) #获取key的value
if not dic:
return render(request,'login.html')
if dic['pwd'] == p:
result = redirect('/index/')
result.set_cookie('username',u) #设置cookie值
#result.set_cookie('username', u, max_age=10) # 设置cookie失效时间10s
return result
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})
另外一种设置cookie失效时间的方法
from django.shortcuts import render,HttpResponse,redirect
from django.core.handlers.wsgi import WSGIRequest
from django.utils.safestring import mark_safe user_info = {
'derek':{'pwd':''},
'jack':{'pwd':''}
} 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) #获取key的value
if not dic:
return render(request,'login.html')
if dic['pwd'] == p:
result = redirect('/index/')
result.set_cookie('username',u) #设置cookie值
#result.set_cookie('username', u, max_age=10) # 设置cookie失效时间10s
# 第二种方法 设置失效时间
import datetime
current_date = datetime.datetime.utcnow() #获取当前时间
current_date = current_date + datetime.timedelta(seconds=5)
result.set_cookie('username',u,expires = current_date)
return result
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})
定制分页
user_list.html
<body>
<ul>
{% for item in li %}
<li>{{ item }}</li>
{% endfor %}
</ul>
<div>
<select id='pg' onchange="ChangePageSize(this)">
<option value="10">10</option>
<option value="30">30</option>
<option value="50">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',{'path':'/user_list/'});
$('#pg').val(v);
}); function ChangePageSize(ths) {
var v = $(this).val();
$.cookie('per_page_count',v,{'path':'/user_list/'});
location.reload()
}
</script>
</body>
views.py
def user_list(request):
current_page = request.GET.get('p', 1)
current_page = int(current_page) per_page_count = request.COOKIES.get('per_page_count',10) #获取cookie值
per_page_count = int(per_page_count) page_obj = Page(current_page,len(LIST),per_page_count) 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})
登录认证(装饰器)
1.FBV
from django.shortcuts import render,HttpResponse,redirect
from django.core.handlers.wsgi import WSGIRequest
from django.utils.safestring import mark_safe
from django.shortcuts import reverse user_info = {
'derek':{'pwd':''},
'jack':{'pwd':''}
} 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)
if not dic:
return render(request,'login.html')
if dic['pwd'] == p:
result = redirect('/index/')
result.set_cookie('username',u)
return result
else:
return render(request,'login.html') def auth(func):
def inner(request,*args,**kwargs):
v = request.COOKIES.get('username')
if not v:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner @auth
def index(request):
v = request.COOKIES.get('username')
return render(request,'index.html',{'current_user':v})
2.CBV
from django import views
from django.utils.decorators import method_decorator @method_decorator(auth, name='dispatch') # 第一种方式
class Order(views.View):
# @method_decorator(auth) #第二种方式
# def dispatch(self, request, *args, **kwargs):
# return super(Order,self).dispatch(request, *args, **kwargs) # @method_decorator(auth) #单独添加
def get(self, reqeust):
v = reqeust.COOKIES.get('username111') return render(reqeust, 'index.html', {'current_user': v}) v = reqeust.COOKIES.get('username111')
return render(reqeust, 'index.html', {'current_user': v})
28.Django cookie的更多相关文章
- Django cookie相关操作
Django cookie 的相关操作还是比较简单的 首先是存储cookie #定义设置cookie(储存) def save_cookie(request): #定义回应 response = Ht ...
- falsk 与 django cookie和session存、取、删的区别
falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...
- django cookie、session
Cookie.Session简介: Cookie.Session是一种会话跟踪技术,因为http请求都是无协议的,无法记录上一次请求的状态,所以需要cookie来完成会话跟踪,Seesion的底层是由 ...
- Python之路-(Django(Cookie、分页))
Cookie 分页 1.获取Cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, sal ...
- Django Cookie 和 Sessions 应用
在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的 ...
- Python Web框架篇:Django cookie和session
part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...
- 5.Django cookie
概述 1.获取cookie request.COOKIES['key'] request.COOKIES.get('key') request.get_signed_cookie(key, defau ...
- Django Cookie,Session
Cookie Cookie的由来 HTTP协议是无状态的,每次请求都是独立的,对服务器来说,每次的请求都是全新的,上一次的访问是数 据是无法保留到下一次的 某些场景需要状态数据或者中间数据等相关对下一 ...
- python Django cookie和session
在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下: 请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...
随机推荐
- python进阶学习笔记(二)
1.模块和包的概念 python的解决方案是把同名的模块放到不同的包中 1.1,导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 ...
- 基于Jquery+Ajax+Json+存储过程 高效分页
在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...
- Samba服务器的安装与配置
Samba服务器主要的功能是实现本地windows系统下方便读写局域网内虚拟机下的文件: Samba与window连接需要使用NetBIOS协议,请确认你的Windows系统已经安装了NetBIOS协 ...
- SIFT解析(一)建立高斯金字塔
SIFT(Scale-Invariant Feature Transform,尺度不变特征转换)在目标识别.图像配准领域具有广泛的应用,下面按照SIFT特征的算法流程对其进行简要介绍对SIFT特征做简 ...
- 99%的人理解错 HTTP 中 GET 与 POST 的区别
转自:http://www.oschina.net/news/77354/http-get-post-different GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发 ...
- linux 云计算Openstack搭建
Openstack 由NASA和Reckspace合作研发并发起的项目,以Apache许可证为授权 云计算三大支柱模型 IaaS:基础架构即服务 提供服务器/虚拟主机/网络等设备资源 PaaS:平台即 ...
- java 集合框架(一)概述
一.概述 Java Collection Framework (JCF) 提供给我们一系列的类和接口,方便开发者处理集合对象. 在Java 2之前,Java是没有完整的集合框架的.它只有一些简单的可以 ...
- linux下stricky
阅读文章链接http://www.linuxdiyf.com/viewarticle.php?id=79380 suid.sgid很易懂,stricky常忘了含义,做个笔记: 该位只对目录配置 ...
- webpack入门宝典
前提摘要 本文是经过二天自己学习总结出来的一些心得,本文是在最新版的webpack4x的基础上进行配置的(听说webpack4x比以往改变都很大有些插件可能有问题).如果你以前没怎么接触过Webpac ...
- 相位噪声 dBc/Hz
相位噪声和抖动是对同一种现象的两种不同的定量方式.在理想情况下,一个频率固定的完美的脉冲信号(以1 MHz为例)的持续时间应该恰好是1微秒,每500ns有一个跳变沿.但不幸的是,这种信号并不存在.如图 ...