Django 路由系统URLconf的使用


Posted in Python onOctober 11, 2018

URLconf是什么?

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的view函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

urlpatterns = [
   url(正则表达式, views视图函数,参数,别名),
 re_path(正则表达式, views视图函数,参数,别名), (在2.0以上版本中使用re_path),
]

参数说明:

正则表达式(regex):

regex是正则表达式的通用缩写,它是一种匹配字符串或url地址的语法。Django拿着用户请求的url地址,在urls.py文件中对urlpatterns列表中的每一项条目从头开始进行逐一对比,一旦遇到匹配项,立即执行该条目映射的视图函数或二级路由,其后的条目将不再继续匹配。因此,url路由的编写顺序至关重要!需要注意的是,regex不会去匹配GET或POST参数或域名,例如对于https://www.example.com/myapp/,regex只尝试匹配myapp/。对于https://www.example.com/myapp/?page=3,regex也只尝试匹配myapp/。如果你想深入研究正则表达式,可以读一些相关的书籍或专论,但是在Django的实践中,你不需要多高深的正则表达式知识。

性能注释:正则表达式会进行预先编译当URLconf模块加载的时候,因此它的匹配搜索速度非常快,你通常感觉不到。

view试图函数:

当正则表达式匹配到某个条目时,自动将封装的HttpRequest对象作为第一个参数,正则表达式“捕获”到的值作为第二个参数,传递给该条目指定的视图。如果是简单捕获,那么捕获值将作为一个位置参数进行传递,如果是命名捕获,那么将作为关键字参数进行传递。

参数(kwargs):

任意数量的关键字参数可以作为一个字典传递给目标视图。

别名(name):

对你的URL进行命名,可以让你能够在Django的任意处,尤其是模板内显式地引用它。相当于给URL取了个全局变量名,避免了高额的维护成本。

Django 路由系统URLconf的使用 

示例:

例如服务器ip地址为127.0.0.1:8080

urlpatterns = [
  path('admin/', admin.site.urls),
  re_path(r'^$', views.index),      # 当用户访问 http://127.0.0.1:8080 时,后端用view.py中的index()函数处理。$表示结尾
  re_path(r"^host/(\d+)",views.host),  # URL示例:127.0.0.1:8080/host/100 \d代表数字;()表示无名分组且可以传参,函数内参数和次顺序一一对应;
      # +表示重复一次或多次前面类型的字符。(\d+)表示不定位数的数字
  re_path(r'^host_list/(\d{4})/(\d{2})$', views.host_list), # URL示例: 127.0.0.1:8080/host_list/2015/10  {4}表示重复四次前面的数字
  url(r"^register",views.register,name="reg"),  # 127.0.0.1:8080/register reg是URL别名,在模板中,例如<a href="{% url 'reg' %}" rel="external nofollow" ></a>
  re_path(r"^login",views.login,name="log"),  # 127.0.0.1:8080/login
  re_path(r'^article/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})',views.article_month), # 127.0.0.1:8080/article/2015/09/10 ?P表示有名分组,
      # ()内是分组,<>内是组名函数内参数名必须和组名相同,顺序可以乱。
]

路由分发

如果一个项目下有很多的app,那么在urls.py里面就要写巨多的urls映射关系。这样看起来很不灵活,而且杂乱无章。

我们可以根据不同的app来分类不同的url请求。

首先,在urls.py里写入urls映射条目。注意要导入include方法

url(r'^app1/',include("app01.urls")), # 路由分发,所有app1开头的,全部转移到app01下的urls.py里去处理

要在app01下创建一个urls.py文件,用来处理请求的URL,使之与views建立映射

urlpatterns = [
  re_path(r'index/$', views.index), # 127.0.0.1:8080/app1/index
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
python3字符串操作总结
Jul 24 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
一些关于python 装饰器的个人理解
Aug 31 Python
Python 解析xml文件的示例
Sep 29 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
Flask搭建一个API服务器的步骤
May 28 Python
Python 中的lambda函数介绍
Oct 10 #Python
django项目搭建与Session使用详解
Oct 10 #Python
Python 变量类型详解
Oct 10 #Python
Python中几种属性访问的区别与用法详解
Oct 10 #Python
Python的argparse库使用详解
Oct 09 #Python
详解Python3中的迭代器和生成器及其区别
Oct 09 #Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 #Python
You might like
构建简单的Webmail系统
2006/10/09 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
python 实现aes256加密
2020/11/27 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
制作部班长职位说明书
2014/02/26 职场文书
客房领班岗位职责
2015/02/11 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python