详解Django的 as_view() 函数:将 Django 视图转换为类视图

  • Post category:Python

as_view()是Django框架中一个非常实用的函数,用于将类视图转换为函数视图。在Django中,视图函数一般采用函数的方式实现,而Django2.x版本之后,提供了基于类的视图,这种视图方式更加灵活、易于维护和封装。但是,基于类的视图不能直接绑定到URL上,需要通过as_view()函数将视图类转换为可直接绑定到URL的函数视图,并做视图函数的包装。

作用

将基于类的视图转换为函数视图

使用方法

下面是使用as_view()函数绑定URL的通用步骤:

  1. 引入django.urls模块。
from django.urls import path
  1. 导入视图类。
from .views import MyView
  1. urlpatterns中绑定URL。
urlpatterns = [
    path('myview/', MyView.as_view()),
]

这样做后,Django就会将MyView类转换为函数视图,作为myview/这个URL的响应函数。

下面我们举两个实例说明as_view()的使用:

实例1:基于类的视图的post请求响应

views.py如下:

from django.views import View
from django.http import HttpResponse

class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('This is GET request')

    def post(self, request, *args, **kwargs):
        return HttpResponse('This is POST request')

urls.py如下:

from django.urls import path
from .views import MyView

urlpatterns = [
    path('myview/', MyView.as_view()),
]

在浏览器中访问http://127.0.0.1:8000/myview/:

使用GET方法:

This is GET request

使用POST方法:

This is POST request

实例2:为基于类的视图添加装饰器

views.py如下:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views import View
from django.http import HttpResponse

@method_decorator(login_required, name='dispatch')
class MyView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('This is view after login')

urls.py如下:

from django.urls import path
from .views import MyView

urlpatterns = [
    path('myview/', MyView.as_view()),
]

在浏览器中访问http://127.0.0.1:8000/myview/:

如果当前用户没有登录,会自动跳转到登录页面,登录成功后会返回‘This is view after login’结果。

注意事项

  1. 必须使用HTTP方法来执行as_view()函数,否则会返回Method Not Allowed错误。
  2. 使用as_view()函数的时候必须有dispatch()这个方法。
  3. 如果需要为基于类的视图添加装饰器,则需要使用method_decorator(request_method_decorator, method)

以上就是as_view()函数的使用方法和实例,通过这个函数,我们可以更方便地使用基于类的视图。