django之基于类的视图和基于函数的视图
Django中的路由可以对应一个函数,也可以对应一个类。
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test.html', views.test, name='test'), # 对应函数,FBA
path('login.html', views.Login.as_view(), name='login'), # 对应类,CBA
]
说明:URL命名和反向解析
在实际开发中,通常会给URL命名,以便在模板或视图中进行反向解析。可以使用 name 参数为URL命名。然后在模板或视图中可以使用 {% url 'test' %} 或 reverse('login') 进行反向解析。
views.py
from django.http import HttpResponse
from django.views import View
# FBA
def test(request):
return HttpResponse('Hello Test')
# CBA
class Login(View):
def dispatch(self, request, *args, **kwargs):#类似于装饰器的作用
print('before dispatch')
obj = super(Login, self).dispatch(request, *args, **kwargs)
print('after dispatch')
return obj
def get(self, request): # 查
return HttpResponse('Hello Get')
def post(self, request): # 增
return HttpResponse('Hello Post')
def put(self, request): # 改
return HttpResponse('Hello Put')
def delete(self, request): # 删
return HttpResponse('Hello Delete')
说明:装饰器
在实际开发中,通常会使用“装饰器”来增加方法的功能
如:对视图类的get方法添加csrf_exempt装饰器,则在class前添加装饰器
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
@method_decorator(csrf_exempt, name='get') # 使用装饰器
class Login(View):
...
def get(self, request):
...
需要注意的是,如果你打算开发RESTful API项目,
Django REST Framework(DRF)提供了更强大的类视图(如 APIView、GenericAPIView 等),可以更方便地处理API请求。
参考文章;
版权申明
本文系作者 @benojan 原创发布在django之基于类的视图和基于函数的视图。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论