函数视图与类视图

本文最后更新于:2 年前

在Django框架中,视图用于处理HTTP请求,并返回响应。

一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

响应内容可以是网页的HTML、重定向、404错误、XML文档或图片等。

函数视图

视图函数的基本结构

  • view_name:表示视图名称。

  • request :必选参数,接收请求对象(HttpRequest类的实例)。

  • args和kwargs:可选参数,用于接收URL中的额外参数。

返回值是返回的响应对象(HttpResponse类或其子类的实例)。

基于函数的视图(Function Base Views,FBV)

  1. 在 views.py 中自定义视图函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from django.http import HttpResponse

    def my_view(request):
    if request.method == 'GET':
    #处理代码块
    return HttpResponse('GET result')
    elif request.method == 'POST':
    #处理代码块
    return HttpResponse('POST result')
    ... ...
    else:
    #处理代码块
  2. 在 urls.py 中配置视图函数的路由

    1
    2
    3
    4
    5
    6
    7
    8
    from django.urls import path
    from django.urls import re_path
    from users import views

    urlpatterns = [
    path('about/', views.my_view)
    # re_path('route(正则)', views.my_view)
    ]

    路由详细配置见 URL路由的配置与使用

类视图

视图函数缺点:若所有请求方式的处理逻辑都定义在同一个视图中,视图很可能庞大且臃肿。为了解决这一问题,Django设计了类视图

基于类的视图(Class Base Views,CBV)

  1. 在 views.py 中自定义视图类

    1
    2
    3
    4
    5
    6
    7
    from django.http import HttpResponse
    from django.views import View
    class MyView(View):
    def get(self, request):
    return HttpResponse(' GET result')
    def post(self,request):
    return HttpResponse('POST result')
  2. 在 urls.py 中配置类视图的路由

    1
    2
    3
    4
    5
    6
    from django.urls import path
    from users.views import MyView

    urlpatterns = [
    path('about/', MyView.as_view()),
    ]
    • URL配置中调用视图类的 as_view() 方法。

    • as_view() 方法的功能是接收请求,获取请求方法 request.method,并根据 request.method 返回相应的视图方法。

    path() 函数在接收到 URL “about/” 时,会调用 MyView 类的 as_view() 方法,根据不同的请求方式执行类视图 MyView 中的不同请求方法。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!