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请求。

参考文章;

  1. django之装饰器的介绍
  2. django之DRF框架搭建API项目的步骤
分类: c/c++ 标签: django 视图 CBV FBV

评论

-- 评论已关闭 --

全部评论