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中内置的itertools模块
Apr 29 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
python xpath获取页面注释的方法
Jan 14 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
对python 调用类属性的方法详解
Jul 02 Python
python 字符串常用方法汇总详解
Sep 16 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
OpenCV全景图像拼接的实现示例
Jun 05 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 动态执行带有参数的类方法
2009/04/10 PHP
php 定义404页面的实现代码
2012/11/19 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
PHP中cookie知识点学习
2018/05/06 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
js数组操作常用方法
2014/05/08 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
python去除所有html标签的方法
2015/05/05 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
如何通过Python实现标签云算法
2019/07/02 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
蓝颜请假条
2014/04/11 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
Mysql Show Profile
2021/04/05 MySQL
基于tensorflow权重文件的解读
2021/05/26 Python
用python画城市轮播地图
2021/05/28 Python