#使用FBV方式
def login_fbv(request):
if request.method=="GET":
return HttpResponse("登录成功")
elif request.method=="POST":
pass
#使用CBV方式
from django.views import View
class LoginView(View): #需要继承自View类
def get(self,request):
return HttpResponse("登录成功")
def post(self,request):
pass
from django.views import View
在 FBV 模式中 Django 的 URL 将一个请求分配给可调用的函数的即 login_fbv(),那么基于类的视图函数这种方式就不再适用了,URL 无法将一个请求分发给类去处理。针对这个问题,CBV 提供了一个 as_view() 静态方法,调用这个方法就会创建一个类的实例。
Function views #基于函数的视图配置url
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views #基于类的视图配置url
1. Add an import: from other_app.views import Home #第一步
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') #第二步
现在我们在 index\urls.py 中配置路由,如下所示:
from index.views import LoginView
urlpatterns=[path('logincbv/',LoginView.as_view())]#使用as_view()方法创建类实例
#第一种方式重写父类
class LoginView(View): #需要继承自View类
username='xiaoli'
def get(self,request):
return HttpResponse("登录成功")
def post(self,request):
pass
class LoginViewChild(LoginView):
#继承后重写类属性
username = 'xiaowang'
#第二种方法也可以
urlpatterns = [
path(r'logincbv/', LoginView.as_view(name="xiaowang"))
]
CBV 体现了 Python 面向对象这一语言特性。CBV 是通过类的方式来编写视图函数。这相比较于 function,更能利用面向对象中多态的特性,因此更容易将项目中比较通用的功能抽象出来。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有