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如何统计序列中元素
Jul 31 Python
pandas实现选取特定索引的行
Apr 20 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python3 简单实现组合设计模式
Jul 02 Python
提高python代码运行效率的一些建议
Sep 29 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
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue异步加载高德地图的实现
2018/06/19 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
JavaScript创建表格的方法
2020/04/13 Javascript
JS如何生成动态列表
2020/09/22 Javascript
Python简单实现网页内容抓取功能示例
2018/06/07 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
公司会计主管岗位责任制
2014/03/01 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
公司捐书倡议书
2015/04/27 职场文书
JS数组的常用方法整理
2021/03/31 Javascript