django是mvt模式,与普通的web开发框架mvc有一定的区别,具体的区别参见这篇博客:
https://blog.csdn.net/weixin_41790086/article/details/80726480
django官方文档中对视图的定义:
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。比如,在一个博客应用中,你可能会创建如下几个视图:
博客首页——展示最近的几项内容。
内容“详情”页——详细展示某项内容。
以年为单位的归档页——展示选中的年份里各个月份创建的内容。
在 Django 中,网页和其他内容都是从视图派生而来。每一个视图表现为一个 Python 函数(或者说方法,如果是在基于类的视图里的话)。Django 将会根据用户请求的 URL 来选择使用哪个视图(更准确的说,是根据 URL 中域名之后的部分)。
接上一章,继续学习django的官方教程:
向 polls/views.py 文件里添加更多的视图:
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
修改polls.urls.py 文件,添加几个url
from django.urls import path
from . import views
urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]
此时,访问 /polls/34/ 和 /polls/34/vote/ 出现相应的内容, 表明以上操作没有问题。
每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404 。至于你还想干些什么,随便你。
下面在index()函数里插入一些新内容,让它能展示数据库里以发布日期排序的最近 5 个投票问题,以空格分割:
from django.http import HttpResponse
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
output = ', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output)
总结:
学到此处,大致了解了django的视图,视图在django起到了展示数据和进行逻辑处理的地方,他一方面连接模型与模块起到数据填充的作用,一方面可以实现一些业务逻辑上的代码。