Django之路第二篇:路由配置

路由配置

1.路由

  在Django中,路由文件的名称一般都是urls.py,顶级路由处于最开始建立的项目目录下。路由的主要作用就是使各个应用中views里面处理数据的函数与请求的url建立映射关系,以urls.py文件里面的路由为寻找路径,去寻找与请求对应的处理方法,从而返回给客户端http页面数据。

path()函数传递四个参数,需要两个:route和view,和两个可选kwargs和name。

(1)path()参数之route

  route是一个包含URL模式的字符串。在处理请求时,Django从第一个模式开始,urlpatterns并在列表中向下,比较所请求的URL和每个模式,直到找到匹配的模式。

(2)path()参数之view

  当Django找到一个匹配的模式时,它会以一个HttpRequest对象作为第一个参数和路由中的任何“捕获”值作为关键字参数来调用指定的视图函数

(3)path()参数之kwargs

  任意的关键字参数可以在字典中传递给目标视图。

(4)path()参数之name

  命名您的URL可以让您从Django的其他地方明确地引用它,特别是在模板中。这个强大的功能使您可以对项目的URL模式进行全局更改,而只触摸单个文件。

2.路由规则

(1)静态路由

  匹配规则:http://127.0.0.1:8000/index/

  url(r'^index',views.index)

对应views.py文件:

1 from django.shortcuts import render
2 
3 def index(request):
4     return render(request, "index.html")

(2)动态路由

  ① 匹配规则 http://127.0.0.1:8000/detail/432432 将最后面的数字当做参数传递给views.detail函数的nid参数

  url(r'^detail/(d+)', views.detail)

  ②匹配规则 http://127.0.0.1:8000/detail2/432432/2 将最后面的两个数字当做参数分别传递给views.detail函数的nid和nnid参数

  url(r'^detail2/(d+)/(d+)', views.detail2)

  ③匹配规则 http://127.0.0.1:8000/detail3/432432/2 将最后面的两个数字根据自定义的名字当做参数分别传递给views.detail函数的p1和p2参数

  url(r'^detail3/(?P<p1>d+)/(?P<p2>d+)', views.detail3)

对应的views.py文件:

 1 from django.shortcuts import HttpResponse
 2 
 3 def detail(request, nid):
 4     print(nid)
 5     return HttpResponse("OK")
 6 
 7 def detail2(request, nid, nnid):
 8     print(nid, nnid)
 9     return HttpResponse("OK")
10 
11 def detail3(request, p1, p2):
12     print(p1, p2)
13     return HttpResponse("OK")

编辑第一个页面响应

1.编辑blog.views

  • 首先引入HttpResponse类
  • 定义一个index函数,函数传入参数为request,函数返回HttpResponse
1 # myblog/blog/views.py
2 
3 from django.http import HttpResponse
4 
5 def index(request):
6      return HttpResponse("Hello,world!")

2.设置路由

  找到myblog文件下面有一个urls.py文件,里面有一个urlpatterns数组,目前urlpatterns数组中已经配置好了admin的路由。由于目前还不知道怎么配置路由,我们可以先仿照着admin配置blog的路由。

  • 首先引入blog
  • 然后在urlpatterns里面添加blog路由函数
 1 # myblog/myblog/urls.py
 2 
 3 from django.contrib import admin
 4 from django.urls import path
 5 from blog import views
 6 
 7 urlpatterns = [
 8     path('admin/', admin.site.urls),
 9     path('index/', views.index),
10 ]

3.启动服务

  • 打开命令行,进入项目中manage.py同级目录

  • 命令行输入:python manage.py runserver 启动服务

  • 打开浏览器输入网址:http://127.0.0.1:8000/index/

经过以上步骤,就可以在浏览器上看见“Hello,world!”字样。

改写第一个页面响应路由

  我在创建第一个第一个页面响应的时候,将URL配置在了myblog/urls.py中。但是现在只建立一个同级的应用,如果以后增加到十个,甚至几十个同级或者嵌套的应用时呢,也都写在这里面,那看上去不是很臃肿吗。所以为了避免这种情况,就得优化它。

  基于这些问题,采用的方法是:上一级urls.py只设置下一级的应用,而不能跳跃式设置嵌套应用url。

具体的步骤是:

  • 在myblog/urls.py文件中引入include

  • 在urlpatterns数组中的blog应用的url函数使用include

  • 在blog文件夹下添加urls.py文件

  • 在blog/urls.py文件中,按照正常的url添加路由

  • 打开浏览器输入:http://127.0.0.1:8000/blog/,既可以正常访问

修改后的myblog/urls.py:

1 # myblog/urls.py
2 
3 from django.contrib import admin
4 from django.urls import path,include
5 
6 urlpatterns = [
7     path('admin/', admin.site.urls),
8     path('blog/', include('blog.urls')),
9 ]

修改后的blog/urls.py:

1 # blog/urls.py
2 
3 from django.conf.urls import url
4 from . import views
5 
6 urlpatterns = [
7     url('^$',views.index)
8 ]

当前的工程目录结构

myblog

  |-----blog(应用目录)

    |-----migrations(数据移植模块,内容自动生成)

      |------__init__.py

    |-----__init__.py

    |-----admin.py(应用的后台管理系统配置)

    |-----apps.py(应用的一些配置)

    |-----models.py(数据模块,类似于MVC结构中的Models(模型))

    |-----tests.py(自动化测试模块)

    |-----views.py(执行响应的代码所在模块)

    |-----urls.py(新增路由文件)

  |-----myblog(项目目录)

    |-----__init__.py

    |-----settings.py(项目中的总配置文件)

    |-----urls.py(URL配置文件)

    |-----wsgi.py(Python应用与Web服务器之间的接口)

  |-----db.sqlite3(数据库文件)

  |-----manage.py(与项目进行交互的命令行工具集入口(项目管理器))

原文地址:https://www.cnblogs.com/wanghao123/p/7987083.html