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 14 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python矩阵的转置和逆转实例
Dec 12 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
Python3远程监控程序的实现方法
Jul 15 Python
python编写简单端口扫描器
Sep 04 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
Python如何安装第三方模块
May 28 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
一篇文章带你搞懂Python类的相关知识
May 20 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 中的一些经验积累
2006/10/09 PHP
php mysql数据库操作类
2008/06/04 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
php自动加载代码实例详解
2021/02/26 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
深入理解python多进程编程
2016/06/12 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Django model update的多种用法介绍
2020/03/28 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python中Selenium库使用教程详解
2020/07/23 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
英语教学随笔感言
2014/02/20 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
个人授权委托书
2014/09/15 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python