django 中的视图

本贴最后更新于 492 天前,其中的信息可能已经水流花落

视图

定义

在Django中视图是一个可调用的对象,能接受用户的请求并返回响应。一般在视图中编写业务逻辑代码。约定将视图放在名为 views.py 的文件里,这个文件放置在项目或应用目录里。

函数视图

最简单的视图,就是一个普通的python函数,它接受 Web 请求并返回一个 Web 响应。

这里是一个以 HTML 文档形式返回当前日期和时间的视图:

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

特点:

  1. 逻辑清晰好理解
  2. 复用性较差

类视图

基于类的视图提供另一种将视图实现为 Python 对象而不是函数的方法。它们不能替代基于函数的视图,但与基于函数的视图相比,它们是有某些不同和优势的。

使用基于类的视图

本质上来说,基于类的视图允许你使用不同的实例方法响应不同 HTTP 请求方法,而不是在单个视图函数里使用有条件分支的代码。

因此在视图函数里处理 HTTP GET 的代码应该像下面这样:

from django.http import HttpResponse

def my_view(request):
    if request.method == 'GET':
        # <view logic>
        return HttpResponse('result')

而在基于类的视图里,会变成:

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

class MyView(View):
    def get(self, request):
        # <view logic>
        return HttpResponse('result')

类视图的路由

因为 Django 的 URL 解析器期望发送请求和相关参数来调动函数而不是类,基于类的视图有一个 as_view() 类方法,当一个请求到达的 URL 被关联模式匹配时,这个类方法返回一个函数。

# urls.py
from django.urls import path
from myapp.views import MyView

urlpatterns = [
    path('about/', MyView.as_view()),
]
回帖
请输入回帖内容 ...