视图
定义
在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)
特点:
- 逻辑清晰好理解
- 复用性较差
类视图
基于类的视图提供另一种将视图实现为 Python 对象而不是函数的方法。它们不能替代基于函数的视图,但与基于函数的视图相比,它们是有某些不同和优势的。
- 与特定的 HTTP 方法(
GET
,POST
, 等等)关联的代码组织能通过单独的方法替代条件分支来解决。 - 面向对象技术(比如 mixins 多重继承)可用于将代码分解为可重用组件。
使用基于类的视图
本质上来说,基于类的视图允许你使用不同的实例方法响应不同 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()),
]
欢迎来到testingpai.com!
注册 关于