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操作MongoDB数据库的方法示例
Jan 04 Python
Python实现批量压缩图片
Jan 25 Python
Python iter()函数用法实例分析
Mar 17 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
django ajax发送post请求的两种方法
Jan 05 Python
Python面向对象编程基础实例分析
Jan 17 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
python手写均值滤波
Feb 19 Python
python 如何区分return和yield
Sep 22 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
投票管理程序
2006/10/09 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
js实现随机抽奖
2020/03/19 Javascript
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
英国最大的海报商店:GB Posters
2018/03/20 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
运动会方队口号
2014/06/07 职场文书
机械专业技术员求职信
2014/06/14 职场文书
护士找工作求职信
2014/07/02 职场文书
求职信内容一般写什么?
2015/03/20 职场文书