django之分页、cookie装饰器
一、分页代码如下
from django.utils.safestring importmark_safeclassPage:def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):self.current_page=current_pageself.data_count=data_countself.per_page_count=per_page_countself.pager_num=pager_num@propertydefstart(self):return (self.current_page - 1) *self.per_page_count@propertydefend(self):return self.current_page *self.per_page_count@propertydeftotal_count(self):v, y=divmod(self.data_count, self.per_page_count)ify:v+= 1returnvdefpage_str(self, base_url):page_list=[]if self.total_count <self.pager_num:start_index= 1end_index= self.total_count + 1else:if self.current_page <= (self.pager_num + 1) / 2:start_index= 1end_index= self.pager_num + 1else:start_index= self.current_page - (self.pager_num - 1) / 2end_index= self.current_page + (self.pager_num + 1) / 2if (self.current_page + (self.pager_num - 1) / 2) >self.total_count:end_index= self.total_count + 1start_index= self.total_count - self.pager_num + 1if self.current_page == 1:prev= '<a class="page" href="javascript:void(0);">上一页</a>'else:prev= '<a class="page" href="%s?p=%s">上一页</a>' % (base_url, self.current_page - 1,)page_list.append(prev)for i inrange(int(start_index), int(end_index)):if i ==self.current_page:temp= '<a class="page active" href="%s?p=%s">%s</a>' %(base_url, i, i)else:temp= '<a class="page" href="%s?p=%s">%s</a>' %(base_url, i, i)page_list.append(temp)if self.current_page ==self.total_count:nex= '<a class="page" href="javascript:void(0);">下一页</a>'else:nex= '<a class="page" href="%s?p=%s">下一页</a>' % (base_url, self.current_page + 1,)page_list.append(nex)jump= """<input type='text' /><a οnclick='jumpTo(this, "%s?p=");'>GO</a><script>function jumpTo(ths,base){var val = ths.previousSibling.value;location.href = base + val;}</script>""" %(base_url,)page_list.append(jump)page_str= mark_safe("".join(page_list))return page_str
django分页后台代码
<!DOCTYPE html> <htmllang="en"> <head><metacharset="UTF-8"><title></title><style>.pagination .page{display:inline-block;padding:5px;background-color:cyan;margin:5px;}.pagination .page.active{background-color:brown;color:white;}</style> </head> <body><ul>{% for item in li %}{% include 'li.html' %}{% endfor %}</ul><div><selectid="ps"onchange="changePageSize(this)"><optionvalue="10">10</option><optionvalue="30">30</option><optionvalue="50">50</option><optionvalue="100">100</option></select></div><divclass="pagination">{{ page_str }}</div><scriptsrc="/static/jquery-1.12.4.js"></script><scriptsrc="/static/jquery.cookie.js"></script><script>$(function(){varv=$.cookie('per_page_count', {'path':"/user_list/`"});$('#ps').val(v);});functionchangePageSize(ths){varv=$(ths).val();console.log(v);$.cookie('per_page_count',v, {'path':"/user_list/"});location.reload();}</script> </body> </html>
user_list.html
/* li.html */<li>{{ item }}</li>
views.py文件
from utils importpagination LIST=[]for i in range(500):LIST.append(i)defuser_list(request):current_page= request.GET.get('p', 1)current_page=int(current_page)val= request.COOKIES.get('per_page_count',10)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})
二、cookie使用
Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息;cookie的内容主要包括:名字,值,过期时间,路径和域。
1、获取Cookie:
1
2
3
4
5
6
|
request.COOKIES[ 'key' ]
request.get_signed_cookie(key, default = RAISE_ERROR, salt = '', max_age = None )
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
|
2、设置Cookie:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
rep = HttpResponse(...) 或 rep = render(request, ...)
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保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。
1
2
|
<script src = '/static/js/jquery.cookie.js' >< / script>
$.cookie( "list_pager_num" , 30 ,{ path: '/' });
|
实例:
defauth(func):'''装饰登录判断是否存在cookie'''def inner(request, *args, **kwargs):try:#获取加盐cookiev = request.get_signed_cookie('NID', salt='dwadwadwa')if notv:return redirect('/login/')exceptException as e:return redirect('/login/')return func(request, *args, **kwargs)returninnerfrom django.utils.decorators importmethod_decoratorfrom django importviewsclassOrder1(views.View):"""方法一CBV --> class Base view"""@method_decorator(auth)defget(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnres@method_decorator(auth)defpost(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnresclassOrder2(views.View):"""方法二CBV --> class Base view"""@method_decorator(auth)def dispatch(self, request, *args, **kwargs):return super(Order2,self).dispatch(request,*args,**kwargs)defget(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnresdefpost(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnres@method_decorator(auth,name='dispatch')classOrder3(views.View):"""推荐使用:方法三CBV --> class Base view"""defget(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnresdefpost(self,request):redirect_to=settings.LOGIN_REDIRECT_URLres=redirect(redirect_to)res.set_signed_cookie('NID', 'user', salt="dwadwadwa")returnresdeflogin(request):"""FBV --> func Base view"""redirect_to=settings.LOGIN_REDIRECT_URLif request.method == "GET":return render(request, 'login.html')if request.method == "POST":user= request.POST.get('username')passwd= request.POST.get('password')obj= models.Usertype.objects.filter(username=user,password=passwd).first()ifobj:res=redirect(redirect_to)"""登录成功设置cookie"""res.set_signed_cookie('NID', user, salt="dwadwadwa")returnreselse:return render(request, 'login.html', {'password_is_wrong': True})
django cookie FBV&CBV使用方法
三、模块继承
模板中也有自己的语言,该语言可以实现数据展示
- {{ item }}
- {% for item in item_list %} <a>{{ item }}</a> {% endfor %}
forloop.counter
forloop.first
forloop.last - {% if ordered_warranty %} {% else %} {% endif %}
- 母板:{% block title %}{% endblock %}
子板:{% extends "base.html" %}
{% block title %}{% endblock %}
实例:
<!DOCTYPE html> <htmllang="en"> <head><metacharset="UTF-8"><title>{% block title %} {% endblock %}</title><linkrel="stylesheet"href="/static/commons.css" /><style>.pg-header{height:50px;background-color:seashell;color:green;}</style>{% block css %} {% endblock %}</head> <body><divclass="pg-header">小男孩管理</div><div><a>asdf</a><aid="">asdf</a><a>asdf</a><a>asdf</a><a>asdf</a></div><iframesrc="/"></iframe> </body> </html>
master.html
{% extends 'master.html' %}{% block title %}用户管理{% endblock %}{% block content %}<h1>用户管理</h1><ul>{% for i in u %}<li>{{ i }}</li>{% endfor %}</ul>{% for i in u %}{% include 'tag.html' %}{% endfor %}{% endblock %}{% block css %}<style>body{background-color:red;}</style>{% endblock %}{% block js %}<script></script>{% endblock %}
tp1.html
转载于:https://www.cnblogs.com/patrick0715/p/6252695.html
django之分页、cookie装饰器相关推荐
- 给django视图类添加装饰器
要将login_required装饰到view class的dispatch方法上, 因为dispatch方法为类方法,不是单个的函数,所以需要将装饰函数的装饰器 login_required转化为装 ...
- django ----CBV中加装饰器
CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...
- Django手写登录装饰器
# 装饰器 def login_required(func):def inner(request):if not request.user.id:return redirect("/logi ...
- Django项目--登录判断装饰器
view.py中定义登录判断装饰器函数 def login_required(view_func):'''登录判断装饰器'''def wrapper(request, *view_args, **vi ...
- 推荐8个炫酷的 Python 装饰器!
Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用.许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短编写程序 ...
- Django cookie、session与CBV装饰器
文章目录 Django cookie.session与CBV装饰器 cookie与session 什么是Cookie 查看Cookie Django中操作Cookie 什么是Session Djang ...
- Django框架(26.Django中的CSRF以及登录装饰器)
CSRF简介 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造.CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件, ...
- 64 装饰器函数: 母版 csrf防御机制 cookie
主要内容: 1: 装饰器函数 a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能 b: 实例: 装饰器的原理: def yue(tools):print('使用%s约一约' ...
- dj鲜生-27-登陆装饰器-使用django内置的登陆装饰器
部分页面要求登陆后可见 没有登陆的用户,不让他访问 使用登陆验证装饰器实现 使用说明 导入函数 from django.contrib.auth.decorators import login_req ...
最新文章
- 贝叶斯思想概述:从贝叶斯定理到贝叶斯网络
- Leetcode 252, 253. Meeting Rooms
- 事件触发控制_前端性能优化:事件的节流throttle与防抖debounce
- ASP.NET代码优化浅析
- Ubuntu在vmware虚拟机无法上网的解决方法
- 【英语学习】【Daily English】U05 Places L01 How can I get to the city museum?
- java为什么使用封装_Java面向对象编程为什么需要封装
- HDU 2340 - Obfuscation(dp)
- long 雪花算法_雪花算法(SnowFlake)Java版
- 自动化测试中自动化切换网络----解决方案
- Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...
- 使用yum update更新文件系统时不更新内核的方法
- Python: str.split()和re.split()的区别
- 数值的八进制、十六进制表示,及以二进制进行显示
- 数据结构与算法------插入排序
- mysql游标使用 loop_mysql 游标 loop while 的使用
- SVN安装及使用教程图文详解
- win10固态硬盘分区 整数_固态硬盘怎么重装win10系统?Win10固态硬盘重装系统教程...
- matlab学习笔记 repmat函数与kron函数之区别
- Trying other mirror问题