1. CBV
1.1 指一个url对应一个类
views中类的写法:

from django.views import View 要导入View

class Index(View): 创建类,但必须继承View

    def get(self,request): 创建方法get,如果是get请求的话,则直接执行里面的代码
        pass

    def post(self,request): 创建方法post,如果是post请求的话,则直接执行里面的代码
        pass    
Views中类的写法

 

1.2 在urls文件中,添加一个url,对应类名的写法:

url(r'^index/', views.Index.as_view), 对应类名的同时,后面必须写as_view

 

1.3 常用的发送请求的方式:

get 查
post 创建
put 更新
delete 删除


1.4 实现执行get或post请求前/后 可以执行其他操作:

class Index(View):

    def dispatch(self, request, *args, **kwargs):
        print('before')
        object = super().dispatch(request, *args, **kwargs) 继承父类的        dispatch方法
        print('after')
        return object

def get(self,request):
    pass

def post(self,request):
    pass    

 

2. FBV
  指的是一个url对应一个函数function,第一天中的那种写法就是FBV

3. 自定义分页 

3.1 django 自带分页功能

from django.core.paginator import Paginator
current_page = request.GET.get('page') 手动的用get方式传一个值
user_list = models.UserInfo.objects.all() 获取UserInfo所有数据
paginator = Paginator(user_list,10) 设置每页显示多少条数据

try:
    posts = paginator.page(current_page) 显示当前页数,current_page的值必须是一个数字
except Exception:
    posts = paginator.page(1) 如果不是一个数字,则返回第一页
View Code

3.2 paginator对象的方法

# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page: page对象

posts对象的方法
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象

<ul>
    {% for posts in posts.object_list %}

    <li>
        {{ posts.name }} 每页显示的数据
    </li>

    {% endfor %}
</ul>
<div>
    {% if posts.has_previous %} 判断是否有上一页
        <a href="/test.html/?page={{ posts.previous_page_number }}">上一页</a>
    {% endif %}

    {% for i in posts.paginator.page_range %} 显示每页的页码
        <a href="/test.html/?page={{ i }}">{{ i }}</a>
    {% endfor %}

    {% if posts.has_next %} 判断是否有下一页
        <a href="/test.html/?page={{ posts.next_page_number }}">下一页</a>
    {% endif %}

</div>
View Code


4. 自定义分页

 1 class PageInfo(object):
 2 
 3     def __init__(self,current_page,all_count,per_page,base_url,show_page=11):
 4         """
 5 
 6         :param current_page:
 7         :param all_count: 数据库总行数
 8         :param per_page: 每页显示行数
 9         :return:
10         """
11         try:
12             self.current_page = int(current_page)
13             except Exception as e:
14             self.current_page = 1
15             self.per_page = per_page
16 
17             a,b = divmod(all_count,per_page)
18             if b:
19                 a = a +1
20             self.all_pager = a
21             self.show_page = show_page
22             self.base_url = base_url
23     def start(self):
24         return (self.current_page-1) * self.per_page
25     
26     def end(self):
27         return self.current_page * self.per_page
28 
29     def pager(self):
30         # v = "<a href='/custom.html?page=1'>1</a><a href='/custom.html?page=2'>2</a>"
31         # return v
32         page_list = []
33 
34         half = int((self.show_page-1)/2)
35 
36         # 如果数据总页数 < 11
37         if self.all_pager < self.show_page:
38             begin = 1
39             stop = self.all_pager + 1
40          # 如果数据总页数 > 11
41         else:
42             # 如果当前页 <=5,永远显示1,11
43             if self.current_page <= half:
44                 begin = 1
45                 stop = self.show_page + 1
46             else:
47                 if self.current_page + half > self.all_pager:
48                     begin = self.all_pager - self.show_page + 1
49                     stop = self.all_pager + 1
50                 else:
51                     begin = self.current_page - half
52                     stop = self.current_page + half + 1
53 
54         if self.current_page <= 1:
55             prev = "<li><a href='#'>上一页</a></li>"
56         else:
57             prev = "<li><a href='%s?page=%s'>上一页</a></li>" %(self.base_url,self.current_page-1,)
58         page_list.append(prev)
59 
60         for i in range(begin,stop):
61             if i == self.current_page:
62                 temp = "<li class='active'><a href='%s?page=%s'>%s</a></li>" %(self.base_url,i,i,)
63             else:
64                 temp = "<li><a href='%s?page=%s'>%s</a></li>" %(self.base_url,i,i,)
65             page_list.append(temp)
66 
67         if self.current_page >= self.all_pager:
68             nex = "<li><a href='#'>下一页</a></li>"
69         else:
70             nex = "<li><a href='%s?page=%s'>下一页</a></li>" %(self.base_url,self.current_page+1,)
71         page_list.append(nex)
72 
73 
74         return ''.join(page_list)
python代码
def user_list(request):
    all_count = models.User.objects.all().count()
    page_info = Page_Info(request.GET.get('page'),     all_count, 10, '/user_list/', 11)
    user_list = models.User.objects.all()[page_info.start():page_info.end()]

    return render(request, 'costom.html', {'user_list': user_list, 'page_info': page_info})
使用发放
 1 <ul>
 2     {% for rows in user_list %}
 3         <li>
 4             {{ rows.name }}
 5         </li>
 6     {% endfor %}
 7 </ul>
 8 <nav aria-label="Page navigation" style="text-align: center">
 9     <ul class="pagination">
10         {{ page_info.pager|safe }}
11     </ul>
12 </nav>   
前端模板的使用

 

posted on 2019-02-27 18:08  花豆豆  阅读(94)  评论(0编辑  收藏  举报