一、分页代码如下

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装饰器相关推荐

  1. 给django视图类添加装饰器

    要将login_required装饰到view class的dispatch方法上, 因为dispatch方法为类方法,不是单个的函数,所以需要将装饰函数的装饰器 login_required转化为装 ...

  2. django ----CBV中加装饰器

    CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...

  3. Django手写登录装饰器

    # 装饰器 def login_required(func):def inner(request):if not request.user.id:return redirect("/logi ...

  4. Django项目--登录判断装饰器

    view.py中定义登录判断装饰器函数 def login_required(view_func):'''登录判断装饰器'''def wrapper(request, *view_args, **vi ...

  5. 推荐8个炫酷的 Python 装饰器!

    Python 编程语言的一大优点是它把所有功能都打包到一个小包中,这些功能非常有用.许多特性可以完全改变 Python 代码的功能,这使得该语言更加灵活.如果使用得当,其中一些功能可以有效缩短编写程序 ...

  6. Django cookie、session与CBV装饰器

    文章目录 Django cookie.session与CBV装饰器 cookie与session 什么是Cookie 查看Cookie Django中操作Cookie 什么是Session Djang ...

  7. Django框架(26.Django中的CSRF以及登录装饰器)

    CSRF简介 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造.CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件, ...

  8. 64 装饰器函数: 母版 csrf防御机制 cookie

    主要内容: 1: 装饰器函数 a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能 b: 实例: 装饰器的原理: def yue(tools):print('使用%s约一约' ...

  9. dj鲜生-27-登陆装饰器-使用django内置的登陆装饰器

    部分页面要求登陆后可见 没有登陆的用户,不让他访问 使用登陆验证装饰器实现 使用说明 导入函数 from django.contrib.auth.decorators import login_req ...

最新文章

  1. 贝叶斯思想概述:从贝叶斯定理到贝叶斯网络
  2. Leetcode 252, 253. Meeting Rooms
  3. 事件触发控制_前端性能优化:事件的节流throttle与防抖debounce
  4. ASP.NET代码优化浅析
  5. Ubuntu在vmware虚拟机无法上网的解决方法
  6. 【英语学习】【Daily English】U05 Places L01 How can I get to the city museum?
  7. java为什么使用封装_Java面向对象编程为什么需要封装
  8. HDU 2340 - Obfuscation(dp)
  9. long 雪花算法_雪花算法(SnowFlake)Java版
  10. 自动化测试中自动化切换网络----解决方案
  11. Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...
  12. 使用yum update更新文件系统时不更新内核的方法
  13. Python: str.split()和re.split()的区别
  14. 数值的八进制、十六进制表示,及以二进制进行显示
  15. 数据结构与算法------插入排序
  16. mysql游标使用 loop_mysql 游标 loop while 的使用
  17. SVN安装及使用教程图文详解
  18. win10固态硬盘分区 整数_固态硬盘怎么重装win10系统?Win10固态硬盘重装系统教程...
  19. matlab学习笔记 repmat函数与kron函数之区别
  20. Trying other mirror问题

热门文章

  1. Linux命令笔记(一)
  2. windows2003配置
  3. java基础—Objcet中的equals方法重写
  4. Windows Vista for Developers——第二部分:深入分析任务对话框
  5. YOLO V3 原理
  6. id,clientid 和 uniqueid 的区别
  7. 计算(a+b)*c的值
  8. 浏览器兼容console对象的简要解决方案
  9. mfc的WM_PAINT笔记
  10. asp.net网站的配置文件