刘老师说这块很重要。。。。。
应该是很重要,大概看了一下,这里面关于views中函数作用,大概看来可能就是相应请求,传入数据和跳转,基本功能上貌似这些框架都差不多吧(其实我并没用过3个框架以上。。。。)
从功能上想,网站必然包含了许多实现具体功能和数据展示的页面,而现在在做的就是构成这些。
那么一个网页他的样子(模板)就是html,那么他的灵魂在这里就是views。这样想似乎就比较清楚。
在构思的时候都是默认躯体存在,设计者需要先设置他的灵魂
在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)
这里可以大概得出结论,我们在views.py中做的所有函数几乎都是返回了一个HttpResponse对象
这个对象呢有这样几个属性:
content:表示返回的内容,字符串类型
charset:表示response采用的编码字符集,字符串类型
status_code:响应的HTTP响应状态码 404什么的
content-type:指定输出的MIME类型
写好这几个函数,也就需要配置一下二级路由,服务器找到app polls的路径我理解为了这里的一级路由,是在pysite(我的web项目名)的urls里面配置的,那么当在app之下在有页面时候同样就需要在polls的urls中进行路径配置,好让服务器找到对应的地址。
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'), ]
<int:question_id> 这个东西,这样想,某个int类型的值,传进来并将其赋给question_id变量,还记得前面我们在views中写的函数吗,其中参数除了request之外还有一个question_id,简直伏笔,刘老师真骚人也。。。。
牛人写书往往也这样,开始看的你头疼,知道看到某处,武功及大成,融会贯通,一通百通。
这时候你在localhost:8000/polls/某个数字 访问的时候就会对应的出现不同效果,看detail函数就能理解到。
这些能看得到就证明灵魂已经能运转了,虽然他还没有躯体,可能就像一个嗷嗷待哺的贾维斯一样吧,史塔克牛逼
path()达成的效果是这样的,这里已经是在找二级路由也就是,从你地址栏输入的polls/后面开始找满足参数里面那个正则形式的,就调用视图下某个函数
比如在
path('', views.index, name='index'),即为如果polls/后面莫得东西,那就走index函数去进行跳转传参,
path('<int:question_id>/', views.detail, name='detail'),如果polls/后面只跟了一个数字 那就调用那个views中叫detail的函数
and so on 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
然后刘老师搞了个能调用数据库中信息展示的函数,也就是把detail进行了改变,让页面能正儿八经做些事,而不是傻冒的打印一句绝大多数字不会改变的字符串
更改一下vies.py
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)
学过mysql你看见order by 就知道他要排序,根据时间的相反数,鬼知道为什么要用1970年到其日期之间的毫秒数,知道也不想理解,内心无法接收。所以他这里根据时间的相反数,可以想象,这个毫秒数越大时间越“新”,这里不用多想,框架后面对应的必然有一条ORDER BY语句,那个是要传一个列进去,这句话默认是升序的,如果这样的话,最新的时间就会排在最下面了。而我们想要的影噶是把最新的放在上面,后来者居上,这就解释得通了。(强行解释)
好的detail有了他的灵魂,你还需要给他一个躯体,这怎么感觉像是在看复仇者联盟2一样,旺达的老公要出来了,搞了这么久原来是托尼给贾维斯找了个女朋友,还送了个定情原石。哦!woc,女朋友,,,,,女。。。。。。。,是啊百合是多么纯洁而浪漫
咳咳,继续
django中提到一个渲染,说白了就是用一个HttpResponse对象把东西传过去。然后页面再执行一些东西,页面,想想能干啥?不就是显示屏和输入设备的功能吗,给你看和让你点让你敲。
在这里,当我们创建项目的时候就有一个雪青色的文件夹放在那里,叫做templates。。。。。(邪恶),这里只是拿出来说这个名字,你要放的模板不在这里,你需要在你对应的app的目录下面新建一个文件夹叫做templates,而且在这之下新建一个和app同名的文件夹比如这里的路径是polls/templates/polls/
这里是你接下来要存放模板的地方,这样做是为了解决一些共有问题,很多时候集体主义状态很乱,虽然现实中多数由于管理者能力不足导致,但是本身确实有局限性,比如这里说你们都是女生,那么单说女生,谁知道找哪一位呢?集体主义有时候强制把一些东西变成了公共状态,而如果设定不是很合理就必然会乱,想想感觉得到,当然事物是相对的,集体的弊端需要个人弥补,个人也有难以单独实现的事情。阴阳调和即可。
所以请按照这个规范来创建,圈里都这样 干,你干是不干?刘老师教程说