博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django之分页、cookie装饰器
阅读量:4650 次
发布时间:2019-06-09

本文共 7530 字,大约阅读时间需要 25 分钟。

一、分页代码如下

from django.utils.safestring import mark_safeclass 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 = '上一页'        else:            prev = '上一页' % (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 = '%s' % (base_url, i, i)            else:                temp = '%s' % (base_url, i, i)            page_list.append(temp)        if self.current_page == self.total_count:            nex = '下一页'        else:            nex = '下一页' % (base_url, self.current_page + 1,)        page_list.append(nex)        jump = """        GO                """ % (base_url,)        page_list.append(jump)        page_str = mark_safe("".join(page_list))        return page_str
django分页后台代码
    
    {% for item in li %} {% include 'li.html' %} {% endfor %}
user_list.html
/* li.html */ 
  • {
    { item }}
  • views.py文件

    from  utils import paginationLIST = []for i in range(500):    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',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: 
    '/' 
    });

    实例:

    def auth(func):    '''    装饰登录判断是否存在cookie    '''    def inner(request, *args, **kwargs):        try:            #获取加盐cookie            v = request.get_signed_cookie('NID', salt='dwadwadwa')            if not v:                return redirect('/login/')        except Exception as e:            return redirect('/login/')        return func(request, *args, **kwargs)    return innerfrom django.utils.decorators import method_decoratorfrom django import viewsclass Order1(views.View):    """    方法一    CBV --> class Base view    """    @method_decorator(auth)    def get(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return res    @method_decorator(auth)    def post(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return resclass Order2(views.View):    """    方法二    CBV --> class Base view    """    @method_decorator(auth)    def dispatch(self, request, *args, **kwargs):        return super(Order2,self).dispatch(request,*args,**kwargs)    def get(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return res    def post(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return res@method_decorator(auth,name='dispatch')class Order3(views.View):    """    推荐使用:方法三    CBV --> class Base view    """    def get(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return res    def post(self,request):        redirect_to = settings.LOGIN_REDIRECT_URL        res = redirect(redirect_to)        res.set_signed_cookie('NID', 'user', salt="dwadwadwa")        return resdef login(request):    """    FBV --> func Base view    """    redirect_to = settings.LOGIN_REDIRECT_URL    if 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()        if obj:            res = redirect(redirect_to)            """            登录成功设置cookie            """            res.set_signed_cookie('NID', user, salt="dwadwadwa")            return res        else:            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 %}

    实例:

        
    {% block title %} {% endblock %}
    {% block css %} {% endblock %}
    小男孩管理
    master.html
    {% extends 'master.html' %}{% block title %}用户管理{% endblock %}{% block content %}    

    用户管理

      {% for i in u %}
    • {
      { i }}
    • {% endfor %}
    {% for i in u %} {% include 'tag.html' %} {% endfor %}{% endblock %}{% block css %} {% endblock %}{% block js %} {% endblock %}
    tp1.html

     

    转载于:https://www.cnblogs.com/patrick0715/p/6252695.html

    你可能感兴趣的文章