美文网首页
django进阶技巧

django进阶技巧

作者: 火乐君_52cd | 来源:发表于2018-07-25 11:04 被阅读0次

    权限控制

    • 在有较多方法需要权限控制时:
      可使用权限控制中间件,permissionMiddleWare
    • 在只有少量方法需要控制时:
      也可使用装饰器的方法,将权限控制函数加载到需要验证的方法之前

    分页器(paginator)

    • 生成一个分页器的对象:
      p = paginator(objects,nums)
      其中objects为想要分页的对象列表,nums为每页可容纳的对象数量

    • django给出的官方文档
    >>> from django.core.paginator import Paginator
    >>> objects = ['john', 'paul', 'george', 'ringo']
    >>> p = Paginator(objects, 2)#新建分页,参数为所有的obj,和每页显示数量
    >>> p.count#所有的obj的数量
    4
    >>> p.num_pages#分出来的页数
    2
    >>> p.page_range#页数的列表
    [1, 2]
    >>> page1 = p.page(1)#得到第一页
    >>> page1
    <Page 1 of 2>
    >>> page1.object_list#第一页的obj列表
    ['john', 'paul']
     
    >>> page2 = p.page(2)
    >>> page2.object_list
    ['george', 'ringo']
    >>> page2.has_next()#是否有下一页
    False
    >>> page2.has_previous()#是否有前一页
    True
    >>> page2.has_other_pages()#是否有其他页
    True
    >>> page2.next_page_number()#下一页的地址,这里最好判断是否有,不然会异常
    Traceback (most recent call last):
    ...
    EmptyPage: That page contains no results
    

    • 项目中优化后的分页方法
    def my_pagination(request, queryset, display_amount=15, after_range_num = 5,bevor_range_num = 4):
        #按参数分页
        paginator = Paginator(queryset, display_amount)
        try:
            #得到request中的page参数
            page =int(request.GET.get('page'))
        except:
            #默认为1
            page = 1
        try:
            #尝试获得分页列表
            objects = paginator.page(page)
        #如果页数不存在
        except EmptyPage:
            #获得最后一页
            objects = paginator.page(paginator.num_pages)
        #如果不是一个整数
        except PageNotAnInteger:
            #获得第一页
            objects = paginator.page(1)
        #根据参数配置导航显示范围
        if page >= after_range_num:
            page_range = paginator.page_range[page-after_range_num:page+bevor_range_num]
        else:
            page_range = paginator.page_range[0:page+bevor_range_num]
        return objects,page_range
    

    相关文章

      网友评论

          本文标题:django进阶技巧

          本文链接:https://www.haomeiwen.com/subject/vwfpmftx.html