概况
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。这里我认为就是网页,不管是哪种。
都要经过视图函数的处理,
而在我们的投票应用中,我们需要下列几个视图:
问题索引页——展示最近的几个投票问题。
问题详情页——展示某个投票的问题和不带结果的选项列表。
问题结果页——展示某个投票的结果。
投票处理器——用于响应用户为某个问题的特定选项投票的操作。
在 Django 中,网页和其他内容都是从视图派生而来。每一个视图表现为一个简单的 Python 函数(或者说方法,如果是在基于类的视图里的话)。Django 将会根据用户请求的 URL 来选择使用哪个视图(更准确的说,是根据 URL 中域名之后的部分)。
在你上网的过程中,很可能看见过像这样美丽的 URL: “ME2/Sites/dirmod.asp?sid=&type=gen&mod=Core+Pages&gid=A6CD4967199A42D9B65B1B” 。别担心,Django 里的 URL 规则 要比这优雅的多!
一个 URL 模式定义了某种 URL 的基本格式——举个例子:/newsarchive/<year>/<month>/
。
为了将 URL 和视图关联起来,Django 使用了 ‘URLconfs’ 来配置。URLconf 将 URL 模式映射到视图
编写视图函数
前面说过,视图函数接收请求,返回相关的页面给浏览器。现在让我们向 vote/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)
这将会直接返回内容到页面上,
把这些视图添加到url里面,现在需要打开urls.py ,
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'),
]
path里面的参数已经说过了,现在开启Django的服务器,开启浏览器’/vote/45’,就会显示相对应的页面,
当某人请求你网站的某一页面时——比如说, "/vote/34/" ,Django 将会载入 mysite.urls 模块,因为这在配置项 ROOT_URLCONF 中设置了。然后 Django 寻找名为 urlpatterns 变量并且按序匹配正则表达式。在找到匹配项 'vote/',它切掉了匹配的文本("vote/"),将剩余文本——"34/",发送至 'vote.urls' URLconf 做进一步处理。在这里剩余文本匹配了 '<int:question_id>/',使得我们 Django 以如下形式调用 detail():
在开始一个真正的视图的时候,我们应该在管理页面给每个问题加上选择,你还记得我们是怎么在管理页面添加问题的吗,打开admin.py,添加一行
admin.site.register(Choice)
这样,你打开管理页面,就会显示 添加选项的页面了,ps:在添加中文选项时,注意乱码问题,问题在于,你需要将choice_text字段的字符编码改成utf8,
写显示内容的视图
接下来的内容引用官方文档 //学累了