Django 教程——视图与 url

Django 教程——目录

创建一个属于我们的 url

大家好,现在是9:40,我刚上完作文课来写教程了!
然后今天,我们要脱离 Django 为我们提供的 Admin 页面,来编写属于我们自己的 url 了!
首先,我们打开 note APP 下的 views.py 文件。
然后,我们来创建一个视图函数

什么是视图函数呢
我们继续残害那本同学录。
当你终于找到同学,让他们来写同学录时,大多数人肯定是直接让他在同学信息上写。
然而,我们可以这样干:
拿出一张白纸,让他来写自己的信息
然后打开同学录,检查一下他写的信息是否有误或不完整,然后自己抄进同学录里
这就是大致视图函数要做的事情

当然视图函数也不知可以提供白纸和信息核对,它还可以告诉同学白纸的存在,叫他们赶快去写呢。
就是这样!

然后我们开始编写这样一个神奇的玩意:我们先让大家知道笔记本的存在和作用。

from django.http import HttpResponse

# Create your views here.

def index(request):
	return HttpResponse("<h1>欢迎来到笔记本网站!</h1>")

按照惯例,我们一行一行的解释。

Line 1:导入 Django 的一个小弟,它叫做 HttpResponse
这玩意是 Django 一个重要的部分:它负责登记要传往浏览器页面的 HTML 字符串,然后解析成浏览器看得懂的形式,给浏览器看。
为什么这个家伙只是小弟,而不是大弟呢 ?因为还有比它更强的家伙。
不过我们待会再用,苍蝇不需要大炮。

Line 2-4:注释+空行,跳过

Line 5:定义一个叫做 index 的函数。
可能大家都注意到了,这玩意有一个叫做 request 的参数。
因为 Django 的一些神奇的设计,所以说,大家只认前面带个 request 参数的视图函数。
而且,request 有些用处。

Line 6:这里是直接返回一个由 HttpResponse 小弟处理的字符串。
可能熟悉 HTML 的朋友发现了,这玩意就是一行标准的 HTML 代码吗!不过只有一行。
没错,我们可以往 HttpResponse 小弟那里传一些 HTML 代码,然后小弟会自动帮我们加上一些浏览器需要的信息,交给浏览器看。
其实还有很多可挖掘的,但是待会儿由更牛逼的玩意出场,就不往下挖掘 HttpResponse 小弟能干什么了。

TIPS:如果不懂得 HTML 的话,请随便打开菜鸟或是 W3C 的教程来看,我们是来学习 Django 的。

然后启动!

python manage.py runserver

然后访问 127.0.0.1:8000/······等等,要访问哪个 URL
好吧,又忘记了:我们还要在一个地方注册一下视图对应的 URL······

我们现在开始注册吧!

给视图函数和 APP 一个 URL

等等,说好的给视图函数 URL 呢?怎么 APP 也要 URL
其实是这样的·····

我们的同学录有着老师,同学,签名,班级四个 APP,而它们,如果都用 / 这个 URL 的话,那么······
“老师部分怎么回事?把我的 index 这个 URL 给顶掉了!”
“学生部分也不是好人!怎么把我的编辑页面占掉了!”
“签名部分你也是的!怎么把查看部分给占走了!”

所以说,我们要给四个 APP 都来一个它们可以为所欲为的 URL
老师:teacher/
学生:student/
签名:write_name/
班级:class/

这样就不会发生抢位置的悲剧了!

回归正题。给我们的 APP 分配 URL,需要在项目文件夹里配置。
打开 <你的项目名>/urls.py,来到 urlpatterns 这个列表里,开始给我们的 APP 注册一个可以自己支配的 URL

from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('note/', include(note.urls)),
]

Line 1:导入 django.urls 里的 pathinclude 小弟。
path 小弟用于登记 APP 们需要的 URL,而 include 小弟则负责将 Django 大哥看不懂的格式转成看的懂的格式,这通常要在外人身上加一层(例如我们的 APP

Line 3urlpatterns 列表,负责登记所有需要一块 URLAPP

Line 4:自带,负责 admin 页面

Line 5:这玩意可以看出 pathinclude 合作负责时的样子
首先,由 path 小弟规定,note/ 这块 URL 就归你了,至于是谁看后面!
然后看了看后面,呦,include 小弟登场了!
include 小弟将这些大哥看不懂的玩意翻译成大哥看得懂的玩意,然后让 path 小弟叫大哥,将 note/ 这块 URL 划给这个 APP
然后一次愉快的 URL 分配就完成了。
最后结尾,最好加个逗号,下次方便不加。

然后 APP 终于分配到了 URL,但是呢?我们的视图函数还没分到呢······
我们本次的主角还没分到呢······

所以说,我们要在我们的 APP 文件夹下创建个 urls.py 文件。

我也不知道 Django 为什么不提前建好······

然后打开文件,写入以下内容:

from django.urls import path
from . import views

app_name = 'note'
urlpatterns = [
	path('', views.index, name='index'),
]

解释一下没出现过的。

Line 2:导入我们的 views.py,就是那个存放视图函数的地方。待会儿,我们的 path 小弟要调用它们。

Line 4app_name 是个什么玩意?这玩意顾名思义,就是标记 APP Name
有什么用?调用 URL 时有用。
怎么个有用法?好吧,这玩意过好大一会儿才用······

Line 6:有没有发现,path 小弟直接接受了我们的视图函数?没错,这也是 path 小弟的一种用法。
后面还跟着个 name 参数是什么?标记 URL Name
待会儿,这玩意要和 app_name 组合起来用,组成一个神奇的组合,定位到每一个 URL

然后,跑一跑试试:

python manage.py runserver

啊这······
在 Bing 了很久之后,才发现我们忘记加引号了!
然后现在加吧!

urlpatterns = [
    path('admin/', admin.site.urls),
    path('note/', include('note.urls')), # 这行!
]

然后重新启动一下。
这次访问 127.0.0.1:8000/note/(就是 APP 分到的 URL 加上视图函数分到的 URL

ohhhhhhh
这是网站的一小步,却是网站的一大步!(笑)

其实还有很多功能要写的,但是时间不早了,明天还要上英语,就先到这里吧!

posted on 2022-05-27 23:06  超能少年飞  阅读(56)  评论(0)    收藏  举报