前言
- 本篇来学习Django中类视图的使用
类视图的定义
- 在Django中也可以使用类来定义一个视图,称为类视图
- 使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。如下
# urls.py from book01.views import RegisterView urlpatterns = [ path('register/', RegisterView.as_view()), ] # views.py from django.views.generic import View class RegisterView(View): """类视图:处理注册""" def get(self, request): """处理GET请求,返回注册页面""" return HttpResponse('这是get请求') def post(self, request): """处理POST请求,实现注册逻辑""" return HttpResponse('这里post请求,实现注册逻辑')
类视图的好处:
- 代码可读性好
- 类视图相对于函数视图有更高的复用性 , 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可
定义类视图需要继承自Django提供的父类View,可使用from django.views.generic import View或者from django.views.generic.base import View导入
类视图的多继承
# urls.py from book01.views import OrderView urlpatterns = [ path('register/', OrderView.as_view()), ] # views.py from django.views.generic import View from django.contrib.auth.mixins import LoginRequiredMixin class OrderView(LoginRequiredMixin, View): """"订单""" # LoginRequiredMixin:判断只有蚕录用户(登录admin站点)才可以访问页面 def get(self, request): print('mro顺序', OrderView.__mro__) return HttpResponse('get请求,我的订单页面,必须登录才可以访问') def post(self, request): return HttpResponse('post请求,我的订单页面,必须登录才可以访问')
- 登录admin站点前访问:http://127.0.0.1:8000/book01/order/
- 访问:http://127.0.0.1:8000/admin
- 登录admin站点后访问:http://127.0.0.1:8000/book01/order/