as_view()
是Django框架中一个非常实用的函数,用于将类视图转换为函数视图。在Django中,视图函数一般采用函数的方式实现,而Django2.x版本之后,提供了基于类的视图,这种视图方式更加灵活、易于维护和封装。但是,基于类的视图不能直接绑定到URL上,需要通过as_view()
函数将视图类转换为可直接绑定到URL的函数视图,并做视图函数的包装。
作用
将基于类的视图转换为函数视图
使用方法
下面是使用as_view()
函数绑定URL的通用步骤:
- 引入
django.urls
模块。
from django.urls import path
- 导入视图类。
from .views import MyView
- 在
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’结果。
注意事项
- 必须使用HTTP方法来执行as_view()函数,否则会返回Method Not Allowed错误。
- 使用as_view()函数的时候必须有
dispatch()
这个方法。 - 如果需要为基于类的视图添加装饰器,则需要使用
method_decorator(request_method_decorator, method)
以上就是as_view()
函数的使用方法和实例,通过这个函数,我们可以更方便地使用基于类的视图。