zoukankan      html  css  js  c++  java
  • django 分页器,序列化 ,MTV MVC

    序列化组件
    #
    # from django.core import serializers # django自带的一个小型的序列化工具
    # def reg(request):
    # user_list = models.User.objects.all()
    # res = serializers.serialize('json',user_list)
    # return render(request,'index.html',locals())


    sweetalert搭建页面
    #
    # 自定义分页器
    # 1 bulk_create() 批量插入数据
    # # for i in range(1000):
    # # models.Book.objects.create(title='第%s本书'%i)
    # # 上面这种方式 效率极低
    #
    # l = []
    # for i in range(10000):
    # l.append(models.Book(title='第%s本书'%i))
    # models.Book.objects.bulk_create(l) # 批量插入数据
    #
    #
    # 自定义分页器的使用
    # 后端代码
    # book_list = models.Book.objects.all()
    # current_page = request.GET.get("page",1)
    # all_count = book_list.count()
    # page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10,pager_count=5)
    # page_queryset = book_list[page_obj.start:page_obj.end]
    # 前端代码
    # {% for book in page_queryset %}
    # <p>{{ book.title }}</p>
    # {% endfor %}
    # {{ page_obj.page_html|safe }}
    #

    #   MTV与MVC模型
    # django框架 自称为是MTV框架
    # M:models
    # T:templates
    # V:views
    #
    # MVC
    # M:models
    # V:views
    # C:controller 控制器(urls)
    # 本质:MTV其实也是MVC



    from django.db import models

    # Create your models here.
    class User(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    choices = (
    (1,'男'),(2,'女'),(3,'其他')
    )
    gender = models.IntegerField(choices=choices)

    """
    1 存choice里面罗列的数字与中文对应关系
    print(user_obj.get_gender_display())
    只要是choices字段 在获取数字对应的注释 固定语法
    get_choices字段名_display()

    2 存没有罗列迟来的数字
    不会报错 还是展示数字
    """


    class Book(models.Model):
    title = models.CharField(max_length=32)






    class Pagination(object):
    def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):
    """
    封装分页相关数据
    :param current_page: 当前页
    :param all_count: 数据库中的数据总条数
    :param per_page_num: 每页显示的数据条数
    :param pager_count: 最多显示的页码个数

    用法:
    queryset = model.objects.all()
    page_obj = Pagination(current_page,all_count)
    page_data = queryset[page_obj.start:page_obj.end]
    获取数据用page_data而不再使用原始的queryset
    获取前端分页样式用page_obj.page_html
    """
    try:
    current_page = int(current_page)
    except Exception as e:
    current_page = 1

    if current_page < 1:
    current_page = 1

    self.current_page = current_page

    self.all_count = all_count
    self.per_page_num = per_page_num

    # 总页码
    all_pager, tmp = divmod(all_count, per_page_num)
    if tmp:
    all_pager += 1
    self.all_pager = all_pager

    self.pager_count = pager_count
    self.pager_count_half = int((pager_count - 1) / 2)

    @property
    def start(self):
    return (self.current_page - 1) * self.per_page_num

    @property
    def end(self):
    return self.current_page * self.per_page_num

    def page_html(self):
    # 如果总页码 < 11个:
    if self.all_pager <= self.pager_count:
    pager_start = 1
    pager_end = self.all_pager + 1
    # 总页码 > 11
    else:
    # 当前页如果<=页面上最多显示11/2个页码
    if self.current_page <= self.pager_count_half:
    pager_start = 1
    pager_end = self.pager_count + 1

    # 当前页大于5
    else:
    # 页码翻到最后
    if (self.current_page + self.pager_count_half) > self.all_pager:
    pager_end = self.all_pager + 1
    pager_start = self.all_pager - self.pager_count + 1
    else:
    pager_start = self.current_page - self.pager_count_half
    pager_end = self.current_page + self.pager_count_half + 1

    page_html_list = []
    # 添加前面的nav和ul标签
    page_html_list.append('''
    <nav aria-label='Page navigation>'
    <ul class='pagination'>
    ''')
    first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
    page_html_list.append(first_page)

    if self.current_page <= 1:
    prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
    else:
    prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)

    page_html_list.append(prev_page)

    for i in range(pager_start, pager_end):
    if i == self.current_page:
    temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
    else:
    temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
    page_html_list.append(temp)

    if self.current_page >= self.all_pager:
    next_page = '<li class="disabled"><a href="#">下一页</a></li>'
    else:
    next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
    page_html_list.append(next_page)

    last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
    page_html_list.append(last_page)
    # 尾部添加标签
    page_html_list.append('''
    </nav>
    </ul>
    ''')
    return ''.join(page_html_list)




    from __future__ import unicode_literals

    from django.db import migrations, models


    class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
    migrations.CreateModel(
    name='User',
    fields=[
    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
    ('username', models.CharField(max_length=32)),
    ('age', models.IntegerField()),
    ('gender', models.IntegerField(choices=[(1, '男'), (2, '女'), (3, '其他')])),
    ],
    ),
    ]


    from __future__ import unicode_literals

    from django.db import migrations, models


    class Migration(migrations.Migration):

    dependencies = [
    ('app01', '0001_initial'),
    ]

    operations = [
    migrations.CreateModel(
    name='Book',
    fields=[
    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
    ('title', models.CharField(max_length=32)),
    ],
    ),
    ]


  • 相关阅读:
    浅谈Eclipse中maven的搭建
    sdk的相关知识以及浅谈手机模拟自动化
    java开发环境搭建
    Python学习————反序列化器(复习)
    Python学习————序列化器(复习)
    Python学习————jwt
    Python学习————对称加密和非对称加密
    Python学习————drf(七)
    Python学习————集群和分布式
    Python学习————drf(六)
  • 原文地址:https://www.cnblogs.com/Sunbreaker/p/11574776.html
Copyright © 2011-2022 走看看