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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
python进阶教程之循环对象
Aug 30 Python
python实现文本文件合并
Dec 29 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
Python 处理数据的实例详解
Aug 10 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
Python实现爬取网页中动态加载的数据
Aug 17 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文件中bom的PHP代码
2012/03/13 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
php查询及多条件查询
2017/02/26 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
初探nodeJS
2017/01/24 NodeJs
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
研究生自我鉴定范文
2013/10/30 职场文书
同学会邀请书大全
2014/01/12 职场文书
校园之星获奖感言
2014/01/29 职场文书
《我的信念》教学反思
2014/02/15 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
捐款活动总结
2014/08/27 职场文书
社区元宵节活动总结
2015/02/06 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL