- 一、装饰器(实现不登陆不能执行一些操作)
- 1.django自带装饰器(不能实现登录后返回当前网页,不能处理ajax)
- from django,contrib.auth.decorators import login_required
- @login_required(login_url = '/users/user_login') 不能使用反向解析url
- def 视图函数(request):
- 2.建立装饰器
- from django.shortcuts import redirect, reverse
- from django.http import JsonResponse
- def login_decorator(func):
- def login_handler(request, *args, **kwargs):
- if request.user.is_authenticated():
- return func(request, *args, **kwargs)
- else:
- if request.is_ajax(): #处理ajax请求
- return JsonResponse({
- 'status': 'nologin'
- })
- return JsonResponse({
- url = request.get_full_path()
- ret = redirect(reverse('users:user_login'))
- ret.set_cookie('url', url)
- return ret
- if request.is_ajax(): #处理ajax请求
- if request.user.is_authenticated():
- return login_handler
- def login_handler(request, *args, **kwargs):
- views.py 登录视图函数中 实现登录后返回原网页
- url = request.COOKIES.get("url", "/")
- ret = redirect(url)
- ret.delete_cookie('url')
- return ret
- 1.django自带装饰器(不能实现登录后返回当前网页,不能处理ajax)
- 二.分页器
- 视图函数中
- from django.core.paginator import PageNotAnInteger, Paginator, EmptyPage
- pagenum = request.GET.get('pagenum', '')
- pa = Paginator(all_orgs, 3)
- try:
- page_list = pa.page(pagenum)
- except PageNotAnInteger:
- page_list = pa.page(1)
- except EmptyPage:
- page_list = pa.page(pa.num_pages)
- return render(request,'html文件',{
- 'page_list':page_list
- })
- 前端页面中
- {% if page_list.has_previous %} 判断是否有上一页
- {% if page_list.has_next %} 判断是否有下一页
- {{ page_list.previous_page_number }} 当前页上一页(整数)
- {{ page_list.next_page_number }} 当前页下一页(整数)
- {{ page_list.number }} 当前页序号
- {{ page_list.paginator.num_pages }} 总页数 page_list.paginator 为分页器对象,为视图函数中的pa
- 拓展:
- Paginator对象
- 创建对象
- Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数
- 属性
- count:对象总数
- num_pages:页面总数
- page_range:页码列表,从1开始,例如[1, 2, 3, 4]
- 方法
- page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常
- 异常exception
- InvalidPage:当向page()传入一个无效的页码时抛出
- PageNotAnInteger:当向page()传入一个不是整数的值时抛出
- EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出
- 创建对象
- Page对象
- 创建对象
- Paginator对象的page()方法返回Page对象,不需要手动构造
- 属性
- object_list:当前页上所有对象的列表
- number:当前页的序号,从1开始
- paginator:当前page对象相关的Paginator对象
- 方法
- has_next():如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
- previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
- len():返回当前页面对象的个数
- Paginator对象
装饰器和分页器
猜你喜欢
转载自blog.csdn.net/qq_41654985/article/details/80927995
今日推荐
周排行