url映射的作用

根据Django的MTV模式,url的映射是根据用户输入或传送而来的url路径,来进行区分去执行相应的view函数来响应用户的操作。

url映射的方式

Django项目的创建后,会自动创建和你项目名称相同的全局文件包,urls.py就在其中。


  1. urlpatterns = [
  2. path('admin/', admin.site.urls),
  3. ]

这是Django自动添加的一条映射。我们的view函数在自己创建的app中,所以需要先引入app文件包中的views


  1. from blog import views

这样就可以在urlpatterns中添加自己的映射条件,例如


  1. from blog import views
  2. urlpatterns = [
  3. path('admin/', admin.site.urls),
  4. path('blog/',views.blog)
  5. ]

写相应的视图函数


  1. from django.shortcuts import render,HttpResponse
  2. def blog(request):
  3. return HttpResponse("WELCOME")

这样在浏览器中输入127.0.0.1:8000/blog/就能看到返回的WELCOME了。

url映射的函数

urlpatterns中可以使用两种函数,path()用来字符串路由,re_path()处理正则式路由。

path函数

必须有的参数

path()中有两个必须填的参数,一个是路径字符串,一个是所调用的函数。
就如上边的例子


  1. path('blog/',views.blog)

这个只匹配在你的路径后加上blog/的情况,然后执行views下的blog函数,表示静态,精确的映射。
路径字符串除了填精确的路径外,还可以填<类型:变量名>,可以在匹配 url的同时传递参数,而且匹配的范围更加庞大。例如:


  1. path('<int:year>/year/',views.year)

可以匹配”任意整型数字/year/“,并且匹配到的整型数字还会以变量名为year的形式作为参数传递给views.year函数。这里注意:views.year函数的参数名必须和你在url映射时起的名字相同,即“year”。
这里的数据类型还有其他几种:

数据类型 说明
str 匹配除分隔符(/)外的非空字符
int 匹配0和正整数
slug 匹配字母、数字、横杠、下划线组成的字符串,str的子集
uuid 匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00
path 匹配任何非空字符串,包括路径分隔符,是全集
非必要参数

path中的非必要参数也有两个,一个是用来给视图函数传递的参数,一个是别名。
用来给视图函数传递的参数除了上述直接在url中,还可以手动指定填入path()中,以字典的形式填入,因为这里的参数类型为**kwargs。而视图函数中的参数同样必须和字典中的键名相同。例如:


  1. path('<int:year>/year/',views.year,{"name":"sfencs","age":20})
  2. def year(req,year,name,age):
  3. str1=str(year)+" "+name+" "+str(age)
  4. return HttpResponse(str1)

如果url参数和字典类型参数都使用了,并且名称相同,如:


  1. path('<int:year>/year/',views.year,{"name":"sfencs","year":20})

那么在视图函数中只能添加一个year参数,并且在字典中的year的数据20会覆盖掉url中的数据。
最后一个参数是别名,例如:


  1. path('blog/',views.blog,name="abc")

在html中,form表单提交的路径就可以使用abc来代替/blog/,具体方式为


  1. <form action="{% url 'alias' %}" method="post">

这种方式只允许在前端中使用,在地址栏中通过使用别名的方式访问是不起作用的。

re_path()函数

re_path()函数和path()函数类似,但它是使用正则表达式的模式来代替字符串模式进行匹配,只要符合正则式的模式就可以匹配成功。


  1. re_path("^\d+/day/",views.day)

这里也可以通过url来传递参数,使用的是正则式分组的方式


  1. re_path("^(\d+)/day/",views.day)

没有给分组起名字的模式,即为无命名参数,分组所匹配的数据会自动当参数传递给视图函数,但是视图函数的形参必须要多写一个参数,名字任意。


  1. re_path("^(?P<day>\d+)/day/",views.day)

上面这种为命名参数,视图函数必须以其名字作为参数名,同样,如果手动添加的参数与其名称相同,那么手动添加的参数数据会将正则式中的覆盖。

路由分发

假如我们一个项目中有多个app,那么所有的映射都写到同一个urls.py,或者公用一个url,难免会产生错误,产生混淆,那么我们可以在每个app下建立自己的urls.py来处理自己的映射关系,在全局urls下进行分发。具体方式为:
在全局urls中添加


  1. path('blog/',include('blog.urls'))

在blog文件夹下创建urls.py文件,在文件中写入


  1. from django.urls import path,re_path
  2. from blog import views
  3. urlpatterns = [
  4. path("login/",views.login)
  5. ]

那么在地址栏中输入/blog/login,就会先由全局urls分发到blog下的urls,再进行相应的视图函数映射。


  • 最后有一点要注意,所有的url映射都是从上到下按顺序匹配,遇到第一个匹配成功后就不在往下进行了。

Django之url映射的更多相关文章

  1. django中“url映射规则”和“服务端响应顺序”

    1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单.      查看方式:         import sys        print sys.path   ...

  2. Django - 将URL映射到视图

    URLconf 就像是 Django 所支撑网站的目录.它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表.你就是以这种方式告诉 Django,对于这个 URL 调用这段代码, ...

  3. Django路由系统---django重点之url映射分发

    django重点之url映射分发 在全局项目的urls.py中进行子项目的映射,然后在子项目中创建一个urls.py去处理自己项目中的请求,同时也实现了代码的解耦 添加路由分发的原则[全局urls.p ...

  4. 第十九章 Django的ORM映射机制

    第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...

  5. Django之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

  6. Django之url路由

    Django之url路由 url路由介绍 url路由是关联url及其视图函数关系的过程. 作用就是使views里面处理数据的函数与请求的url建立映射关系 url路由配置 Django的url路由配置 ...

  7. Django之URL(路由系统)用法

    路由系统 路由系统概念 简而言之,路由系统就是路径和视图函数的一个对应关系.django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里 ...

  8. django的url配置

    在一个请求到达的时候,最先达到的就是视图层,然后根据url映射到视图函数.这一部分我们来说明url的配置. 概述 为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(U ...

  9. Django之URL控制器(路由层)

    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), 一.视图层路由配置系统 URL配置(URLconf)就像Django ...

随机推荐

  1. 前端自动构建工具Gulp入门

    基于nodeJs:通过不同插件能自动完成一系列动作,比如压缩js/css/img.解析模版标签.解析less等: 一.安装gulp 安装nodeJs 打开Node.js command prompt ...

  2. HDFS恢复误删操作的方法

    1.通过垃圾箱恢复 使用这种方式的前提是在hdfs上面开启trash功能,默认是没有开启的.interval的值默认为0,单位是分钟.只需要在hadoop的配置文件core-site.xml中添加下面 ...

  3. 部署---阿里云服务器,linux, ubuntu ,部署django用到的一些命令

    部署项目<下课说>APP时,总结出的一些命令和方法细节 Linux.ubuntu.django.uwsgi.nginx.mysql 里面有些是查找的资料,我也不大懂[手动笑哭],这还是部署 ...

  4. 从Spring-Session源码看Session机制的实现细节

    Re:从零开始的Spring Session(一) Re:从零开始的Spring Session(二) Re:从零开始的Spring Session(三) 去年我曾经写过几篇和 Spring Sess ...

  5. 啰里吧嗦CountDownLatch

    java.util.concurrent Class CountDownLatch 目录 CountDownLatch 是什么 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等 ...

  6. 【Tomcat】tomcat配置文件详解

    Tomcat Server的结构图 结构框架,如下 属性表格 元素名 属性 解释 server(它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口 ...

  7. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)

    上一篇写到支付宝的支付,这代码copy下来就能直接用了,   我写学习文档时会经常贴 官方参数文档的案例地址, 因为我觉得 请求参数,响应参数说明 官方文档整理的很好,毕竟官方不会误导大家. 我学一个 ...

  8. Spring全家桶系列–SpringBoot渐入佳境

    //本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 首发地址:https://www.javazhiyin.com/20913.html 萌新:小哥,我在实 ...

  9. python 约束,异常处理与MD5加密

    1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...

  10. 查看linux 内存

    1.vmstat vmstat命令显示实时的和平均的统计,覆盖CPU.内存.I/O等内容.例如内存情况,不仅显示物理内存,也统计虚拟内存. $ vmstat -s 2.top top命令提供了实时的运 ...