前面通过 Models 和 Admin 我们实现了对数据的创建和管理,就算是把数据库部分给准备好了
回到第一篇(https://blog.csdn.net/Jeeson_Z/article/details/82711620)给出的图(心中一定要时刻有这张图,编写过程才不会迷路)
客户端发来的请求先经过 WSGI ,但 Django 已经为我们准备好了 WSGI,就在 mysite/wsgi.py 文件里,所以我们可以不管他,下一步中我们发现 WSGI 又发给了 URLs,URLs 再转到 Views,本篇就来介绍和编写 URLs 路由系统
1. 路由干什么的?
URLs 得到浏览器请求的 url 后,对照路由表,然后分配到子路由或者转到功能函数,可以认为它是个导航系统
2. 总路由 mysite/urls.py
路由信息保存在 urls.py 文件里面,项目名字下的叫总路由,所有的 url 都先发到这里来做对照,在分发给对应的子路由,也就是每个应用的路由,在我们的项目中,总路由就是 mysite/urls.py,子路由就应该是 polls/urls.py,这个文件我们待会儿手动创建,现在先看总路由 mysite/urls.py
打开 mysite/urls.py
(1)里面默认有代码 path('admin/', admin.site.urls),这就是为什么我们能用 http://127.0.0.1:8000/admin/ 访问管理员页面,因为这里匹配了 admin 这个url,顺便补充一下: http://127.0.0.1:8000 是本机 IP 地址和端口,我们的服务器就运行在上面
(2)在路由表 urlpatterns 里添加 url 及 对应分发的子路由文件的代码,代码中的 path() 用于匹配路由 include() 用来分发个子路由,参数是子路由的文件名,这个参数文件 ‘polls.urls’ 我们等下就创建,通过此行代码,我们就成功的把 url 里匹配到 'polls' 的 url 分发到 polls 应用的路由
扫描二维码关注公众号,回复: 3406151 查看本文章"""mysite URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path # 导入include来分发路由 from django.urls import include # urlpatterns就是路由表 urlpatterns = [ # path()用于匹配路由 # include()用来分发个子路由,参数是子路由的文件名 path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
3. 子路由 polls.urls.py
子路由的功能和总路由有所不同:总路由只负责把 url 分发给对应的子路由,而子路由直接根据 url 绑定 Views 里对应的业务功能
(1)创建 polls.urls.py
(2)用 app_name = 'polls' 来设置命名空间,避免和其他应用的同名 url 混淆
(3)编写路由表:path()负责绑定业务功能
第一个参数是url,url里的参数用'< >'包裹
第二个参数是绑定的业务功能,xxx.as_view()把xxx类作为业务功能 ,这里先写着,不管,下一篇介绍
第三个参数代表该条url的名字
# 自建的路由文件 # 导入path来匹配url from django.urls import path # 导入当前目录下的views from . import views # 确定命名空间 app_name = 'polls' # 子路由表 urlpatterns = [ # path()负责绑定业务功能 # 第一个参数是url,url里的参数用'< >'包裹 # 第二个参数是绑定的业务功能,xxx.as_view()把xxx类作为业务功能 # 第三个参数代表该条url的名字 path('', views.IndexView.as_view(), name='index'), path('<int:pk>/', views.DetailView.as_view(), name='detail'), path('<int:pk>/results/', views.ResultsView.as_view(), name='results'), path('<int:question_id>/vote/', views.vote, name='vote'), ]