zoukankan      html  css  js  c++  java
  • Python之路-(Django(Cookie、分页))

    Cookie

    分页

    1、获取Cookie:

    1 request.COOKIES['key']
    2 request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    3     参数:
    4         default: 默认值
    5            salt: 加密盐
    6         max_age: 后台控制过期时间

    2、设置Cookie:

    rep = HttpResponse(...) 或 rep = render(request, ...)
     
    rep.set_cookie(key,value,...)
    rep.set_signed_cookie(key,value,salt='加密盐',...)
    例如:
      
    res = redirect("/cmdb/index")
      #当成功登录后,设置cookie,超时时间为600秒(10分钟)
      res.set_cookie("username",u,max_age=1800 )
      参数: 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获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    普通设置获取:

      res = redirect("/cmdb/index")
      #当成功登录后,设置cookie,超时时间为1800秒(10分钟)
      res.set_cookie("username",u,max_age=1800 )
      #获取当前登录用户
      cook = request.COOKIES.get("username")
     

    加密设置获取:

       #设置cookie并加密
    res = redirect("/cmdb/index") res.set_signed_cookie('username',"root",salt="abcdef")
      #解密   request.get_signed_cookie(
    'username',salt="abcdef")   salt是额外的一个参数,叫加密盐,牢记用什么加密,用什么解密,其它普通Cookie参数在这里都能用

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

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

    分页

    二、自定义分页

    分页功能在每个网站基本都能用到,其实本质上就是当后台把数据取出来以后分成一页一页的放到前段页面。

    1、设定每页显示数据条数

    2、用户输入页码(第一页、第二页...)

    3、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置

    4、在数据表中根据起始位置取值,页面上输出数据


    ,需要在页面上显示分页的页面。如:[上一页][1][2][3][4][5][下一页]

    1、设定每页显示数据条数

    2、用户输入页码(第一页、第二页...)

    3、设定显示多少页号

    4、获取当前数据总条数

    5、根据设定显示多少页号和数据总条数计算出,总页数

    6、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置

    7、在数据表中根据起始位置取值,页面上输出数据

    8、输出分页html,如:[上一页][1][2][3][4][5][下一页]

    实例:

    from django.utils.safestring import mark_safe
    
    
    class Page:
        def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):
            self.current_page = current_page
            self.data_count = data_count
            self.per_page_count = per_page_count
            self.pager_num = pager_num
    
        @property
        def start(self):
            return (self.current_page - 1) * self.per_page_count
    
        @property
        def end(self):
            return self.current_page * self.per_page_count
    
        @property
        def total_count(self):
            v, y = divmod(self.data_count, self.per_page_count)
            if y:
                v += 1
            return v
    
        def page_str(self, base_url):
            page_list = []
    
            if self.total_count < self.pager_num:
                start_index = 1
                end_index = self.total_count + 1
            else:
                if self.current_page <= (self.pager_num + 1) / 2:
                    start_index = 1
                    end_index = self.pager_num + 1
                else:
                    start_index = self.current_page - (self.pager_num - 1) / 2
                    end_index = self.current_page + (self.pager_num + 1) / 2
                    if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:
                        end_index = self.total_count + 1
                        start_index = self.total_count - self.pager_num + 1
    
            if 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 in range(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 onclick='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

    html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .pagination .page{
                display: inline-block;
                padding: 5px;
    {#            background-color: azure;#}
                margin: 5px;
            }
            .pagination .page.active{
                background-color: brown;
                color: white;
            }
        </style>
    </head>
    <body>
        <ul>
        {% for item in li %}
            <li>{{ item }}</li>
        {% endfor %}
        </ul>
        <div class="pagination">
            {{ page_str }}
        </div>
    </body>
    </html>
  • 相关阅读:
    LeetCode刷题之字符串
    LeetCode刷题之数组复习
    为什么要用移码来表示阶码(指数)呢?
    字节左移跟右移
    一个有趣的问题
    为什么对数组名取地址,得到的为整个数组的地址?
    在win10 64位下搭建汇编环境
    windows切换samba账号进行连接
    samba服务配置记录
    subversion钩子函数使用记录
  • 原文地址:https://www.cnblogs.com/lei0213/p/6253676.html
Copyright © 2011-2022 走看看