一,路由的作用

  URL配置就是Django支持的网址的目录,它的本质是URL与调用的视图函数之间的映射表,用URL告诉Django该执行哪个函数。

二,路由的配置

from django.conf.urls import urlurlpatterns = [url(正则表达式, views视图函数,参数,别名),
]

 ps:第一个参数是正则表达式,匹配规则按照从上往下依次匹配,匹配到一个之后会立即匹配,直接执行其对应的视图函数

  网站首页路由

url(r'^$',views.home)

  网址不存在路由:

url(r'',views.error)

三,无名分组

  本质:将加括号的正则表达式匹配到内容当做位置参数自动传递给对应的视图函数。

  urls.py

url(r'^test/(\d+)/',views.test),  # 匹配一个或多个数字

  views,py

def test(request,xxx): # 括号中内容传给了XXXprint(xxx)return HttpResponse('test')

四,有名分组

  本质:将加括号的正则表达式匹配到的内容当做关键字参数自动传递给对应的视图函数。

  urls.py

url(r'^test/(?P<year>\d+)/',views.test),  # 匹配一个或多个数字(?<year>:给参数取名叫year)

  views.py

def test(request,year): # 括号中的参数部分传给了yearprint(year)return HttpResponse('test')

  ps:1,无名分组和有名分组不能混着用。2,可以支持用类型多个形式匹配

url(r'^test/(\d+)/(\d+)/',views.test), # 无名分组多个
url(r'^test/(?P<year>\d+)/(?P<xxx>\d+)/',views.test), # 有名分组多个

五,反向解析:

  本质:就是获取到一个能够访问名字所对应的视图函数(根据名字动态获取对应的路径)

  方式:

    在前端中:

{#    在前端页面中,跳转到test函数,并且携带两个参数10,23#}<a href="{% url 'test' 10 23 %}">哈哈</a>

    在urls.py中:

from django.conf.urls import url
from app01 import views
urlpatterns = [# 两个参数一个year被,一个month# 与视图函数的对应关系命名为testurl(r'^test/(?P<year>[0-9]{2})/(?P<month>[0-9]{2})/$',views.url_test,name='test'),
]

    在视图函数中:

from django.shortcuts import render, HttpResponse,redirect,reverse
def url_test(request,year,month):print(year)print(month)url=reverse('test',args=(10,20))print(url)return HttpResponse('ok')

  总结:

    1:在html中:{% url "别名" 参数  参数%}

    2:url=reverse('test',args=(10,20))

  ps:

    1:可以给每一个路由与视图函数对应关系起一个名字

    2:这个名字能够唯一标识出对应的路径

    3:注意这个名字不能重复是唯一的

六:路由分发:

    项目名下的urls,py(总路由)不再做路由与视图函数的匹配关系而是做路由分发。

    总路由:

from django.conf.urls import include
urlpatterns = [
# 路由分发  注意路由分发总路由千万不要$结尾url(r'^app01/',include(app01_urls)),url(r'^app02/',include(app02_urls))
]

    在应用下新建urls.py文件,在该文件内写路由与视图函数的对应关系即可。

from django.conf.urls import url
from app01 import views
urlpatterns = [url(r'^index/',views.index)
]

七,名称空间:

   原因:由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。

   在路由分发的时候处理名称空间:

 url(r'app01/',include('app01.urls',namespace='app01')),url(r'app02/',include('app02.urls',namespace='app02'))

   ps:用处很少,因为我们命名的时候都会用不同的名字,(前缀用项目名标识)

八,伪静态:

  后缀为.html结尾会被认为是静态网页(数据不变),在url后面加上.html增加被收录的概率。

url(r'^index.html',views.index)
url(r'^test/(\d+.html)',views.index)
url(r'^demo/(?P<year>\d+.html)')

九,虚拟环境:

  虚拟环境创建(先创建一个python项目,选择虚拟项目记得勾选能够被应用于其他项目,下次创建项目时即可选择改虚拟环境作为开发环境)

  Django2.0版本与1.0区别

    一:1.0版本的url和2.0版本的re_path分组出来的数据都是字符串类型

    二:默认有五个转换器,感兴趣的自己可以课下去试一下

    三:str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式

    四:int,匹配正整数,包含0。

    五:slug,匹配字母、数字以及横杠、下划线组成的字符串。

    六:uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。

    七:path,匹配任何非空字符串,包含了路径分隔符(/)

十,自定义转换器:

  三部分:1:正则表达式 2:to_python 3:to_url

class FourDigitYearConverter:  regex = '[0-9]{4}'  def to_python(self, value):  return int(value)  def to_url(self, value):  return '%04d' % value  占四位,不够用0填满,超了则就按超了的位数来!
register_converter(FourDigitYearConverter, 'yyyy')  urlpatterns = [  path('articles/2003/', views.special_case_2003),  path('articles/<yyyy:year>/', views.year_archive)
] 

  

  

  

  

   

  

  

转载于:https://www.cnblogs.com/ay742936292/p/10998635.html

Django路由介绍相关推荐

  1. django目录介绍

    django目录介绍: untitled1:项目根目录 -app:应用名称 migrations:数据库操作记录() __init__.py:没啥用,我也不知道干啥用的.但是不能删除,可以写一下数据库 ...

  2. Django框架介绍及配置

    Django框架介绍及配置 一, WEB框架介绍 1.1Web应用程序处理流程 1.2Web框架程序的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复 1.3 Web应用程序的本质 ...

  3. Django 路由分发

    Django 路由分发 当一个url请求过来之后 1.先到项目主目录下的urls内. 2.由这个url做处理分发给其他app内的urls. 一级路由:主目录urls内引入include from dj ...

  4. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

  5. Linux 网络路由介绍

    from: Linux 网络路由介绍 六月份的时候我们讨论了基础网络配置,其中有一点我没提到的是路由.这篇文章将简洁明了的介绍下Linux网络下的路由,来方便理解一些简单的网络环境. 每台网络中相连的 ...

  6. 关于Django路由层简单笔记

    Django-路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  7. Python框架django路由管理

    django路由管理 普通路由 参数路由 正则路由 正则参数路由 分布式路由 路由的定义 所有django的路由,都必须定义在 路由管理器 urls.py urlpatterns 列表中 在 urlp ...

  8. 一、Django框架介绍

    一.Django框架介绍 1.1 框架背景 ​ 要学习一个框架,了解它的诞生,背景,特点是必不可少的.只有对框架有足够多的了解才能确定这个框架是否适合你自己,当然实践是最好的老师,不能仅凭我一面之词来 ...

  9. Django路由(urls.py)

    Django路由(urls.py) 路由控制着视图函数的调用.即发起的请求所包含的路由就对应着Django会调用该路由所对应的视图函数.所以,综合来看,在Django中的视图+路由才应该是等价于MVC ...

最新文章

  1. 激光雷达Lidar与毫米波雷达Radar:自动驾驶的利弊
  2. AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
  3. 一个 3D 多功能和灵巧的神经界面
  4. Kaggle: House Prices: Advanced Regression Techniques
  5. mysql 导出表结构和表数据 mysqldump用法(自己测试了)
  6. es文本分析java代码_Elasticsearch系列---Java客户端代码Demo
  7. KNN算法(K近邻学习)
  8. Facebook工程师之死,一个走钢丝的互联网中年男人
  9. C#将DBGrid中数据导出为Excel的很小很强大的代码
  10. 一天一个小技巧(2)——CSDN编译器的首行缩进2字符
  11. [转载]linux+nginx+python+mysql安装文档
  12. 为什么谐振时电抗为0_108kVA/108kV/27kV变频串联谐振试验装置
  13. PCSHARE VIP 2005源代码
  14. You hasn‘t joined this enterprise!
  15. 对向传播神经网络(CPN)
  16. 2022跨年烟花代码
  17. 手写签名更改为透明背景png图片
  18. 国产智多晶FPGA基于Verilog的设计开发流程
  19. (附源码)spring boot基于微信小程序的口腔诊所预约系统 毕业设计 201738
  20. 算法入门1:基本概念

热门文章

  1. Oracle RMAN中备份表空间名为'TEST'时需要注意的问题
  2. 基础才是重中之重~用好configSections让配置信息更规范
  3. Android异步消息处理机制完全解析,带你从源码的角度彻底理解
  4. js 对表格的动态操作(动态添加行,删除该行,在指定位置添加控件)
  5. 备忘录方法与动态规划比较
  6. Hadoop源码分析-Context
  7. 构件图(Component Diagram)
  8. golang中的runtime
  9. 已解决:PC插上串口工具后PC端口com那里有个黄色叹号,无法使用串口工具
  10. 目标代码文件、可执行文件和库