每日10行代码137:学习django-认识视图

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起到了展示数据和进行逻辑处理的地方,他一方面连接模型与模块起到数据填充的作用,一方面可以实现一些业务逻辑上的代码。

上一篇:Django的quickstart


下一篇:Django搭建示例项目实战与避坑细节