Django自带分页的一种优化方法

django提供了一种可以用来进行分页的方法:

from django.core.paginator import Paginator as pa
test_objet = ['aa','bb','cc','dd','ee','ff','gg','hh','ii','jj','kk','ll']
test_1 = pa(test_objet,3)
for i in test_1.page(1):
    print(i)

#print: aa,bb,cc

当数据量较大时候,看起来和想象中的不太一样:

看起来是有点太多了,对其进行优化:

class Pagination_p2(object):

    def __init__(self,request,queryset,page_size=5,page_param='page',plus=3) -> None:
        self.request = request
        self.query = queryset
        self.plus = plus
        self.page_param = page_param
        self.pagination = pa(queryset,page_size)

定义一个新的分页辅助类Pagination_p2。

request是前端返回的请求,queryset是从数据库中拿到的数据,plus是显示的页面数(就是当前页面+- plus),page_size为每一页中的数据数目。

之后定义函数,获取页面:

        page = self.request.GET.get(self.page_param)
        try:
            now_pagination = self.pagination.page(page)
        except PageNotAnInteger:
            now_pagination = self.pagination.page(1)
        except EmptyPage:
            now_pagination = self.pagination.page(1)

如果page不合法,则返回到第一页

        if self.pagination.count <= self.plus * 2 + 1:
            now_pagination_list = now_pagination.paginator.page_range
        else:
            if now_pagination.number <= self.plus:
                now_pagination_list = range(1,self.plus*2+1+1)
            elif now_pagination.number >= self.pagination.num_pages - self.plus:
                now_pagination_list = range(self.pagination.num_pages - self.plus * 2,self.pagination.num_pages + 1)
            else:
                now_pagination_list = range(now_pagination.number - self.plus,now_pagination.number + self.plus + 1)

当页面数不满足 page +- plus的分页需求时,则一直显示全部页面内容;

当页面数量少于 plus时 或 大于 最大值 - plus时,锁定显示页面数量;

通常情况显示为 (当前页面数 - plus,当前页面 + plus)

 return (now_pagination,now_pagination_list)

返回量

    page_object = Pagination_p2(request=request,queryset=queryset).html()
    context =  {
        'now_pa' : page_object[0],
        'pa_pn' : page_object[1]
    }

 视图view 中接受返回量。

 templates中进行相关定义。

这样看起来就舒服得多了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django自带的Authentication模块提供了一套完整的用户认证和授权系统,包括用户注册、登录、退出登录、重置密码等功能。下面是使用Django自带的Authentication模块的步骤: 1. 在settings.py中配置AUTHENTICATION_BACKENDS和INSTALLED_APPS,确保Authentication模块被正确加载。 ```python AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', ] INSTALLED_APPS = [ # ... 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', # ... ] ``` 2. 在urls.py中配置登录、退出登录、重置密码等视图函数的路由。 ```python from django.urls import path from django.contrib.auth import views as auth_views urlpatterns = [ # 登录 path('login/', auth_views.LoginView.as_view(), name='login'), # 退出登录 path('logout/', auth_views.LogoutView.as_view(), name='logout'), # 密码重置 path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'), # 密码重置确认 path('password_reset_confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'), # 密码重置完成 path('password_reset_done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'), # 密码重置发送邮件 path('password_reset_email/', auth_views.PasswordResetEmailView.as_view(), name='password_reset_email'), ] ``` 3. 在模板中使用Django自带的登录、退出登录、重置密码等表单。 ```html {% if not user.is_authenticated %} <form method="post" action="{% url 'login' %}"> {% csrf_token %} <label for="username">Username:</label> <input type="text" name="username"><br> <label for="password">Password:</label> <input type="password" name="password"><br> <input type="submit" value="Login"> </form> {% else %} <p>Welcome, {{ user.username }}!</p> <form method="post" action="{% url 'logout' %}"> {% csrf_token %} <input type="submit" value="Logout"> </form> {% endif %} ``` 4. 使用Django自带的User模型进行用户管理。 ```python from django.contrib.auth.models import User # 创建用户 user = User.objects.create_user(username='testuser', password='testpass') # 设置用户属性 user.first_name = 'Test' user.last_name = 'User' user.email = 'testuser@example.com' user.is_staff = True user.is_superuser = True # 保存用户 user.save() # 验证用户 from django.contrib.auth import authenticate user = authenticate(username='testuser', password='testpass') if user is not None: # 登录成功 else: # 登录失败 ``` 以上就是使用Django自带的Authentication模块的基本方法,具体使用时可以根据需求进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值