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 相关文章推荐
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
python使用插值法画出平滑曲线
Dec 15 Python
详解Python_shutil模块
Mar 15 Python
浅谈Python爬虫基本套路
Mar 25 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Python模块的制作方法实例分析
Dec 21 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python中threading库实现线程锁与释放锁
May 17 Python
PYTHON InceptionV3模型的复现详解
May 06 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去除重复字的实现代码
2011/09/16 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
中文教师求职信
2014/02/22 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
产品开发计划书
2014/04/27 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
如何利用React实现图片识别App
2022/02/18 Javascript
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫