Django之路由层

目录

一、路由层

二、无名分组

三、有名分组

四、反向分析

[1. 无名分组反向解析](#1. 无名分组反向解析)

[2. 有名分组反向分析](#2. 有名分组反向分析)

五、路由分发

六、名称空间(了解)

七、伪静态的概念(了解)

八、虚拟环境(了解)

九、Django1和Django2的区别

[1. 路由文件](#1. 路由文件)

[2. 创建表关系](#2. 创建表关系)


一、路由层

  • Django1中
python 复制代码
url(r'^test/$', views.test),
url(r'testadd', views.testadd),
# 首页的地址
url(r'^$', views.home),
  • Django2中
python 复制代码
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),

注:url方法的第一个参数支持的是正则表达式。

二、无名分组

无名分组就是把正则中小括号里的匹配到的内容以位置参数的形式传递给视图函数。

python 复制代码
url(r'^test/(\d+)$', views.test),

补充:

python 复制代码
get请求的第一种方式:
http://127.0.0.1:8000/test/?a=1&b=2
get请求的第二种方式:
http://127.0.0.1:8000/test/123/11

三、有名分组

有名分组就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数。

python 复制代码
url(r'^test/(?P<year>\d+)/(?P<month>\d+)$', views.test),

注:有名和无名是否能够混合使用

不要混合使用,要么无名,要么有名,但是,无名、有名可以使用多次。

python 复制代码
url(r'^test/(?P<year>\d+)/(\d+)$', views.test),

无名有名分组的使用可以有了接收参数的方法

四、反向分析

反向分析就是每一个路由都可以起一个别名,通过Django提供的一些方法去解析这个别名,得到一个别名对应的路由。

python 复制代码
url(r'^v1/v2/v3/home$', views.home, name='home'),
  • 后端反向解析
python 复制代码
'''反向解析'''
res=reverse('home') # /v1/v2/v3/home
print(res)
  • 前端反向分析
python 复制代码
<a href="{% url 'home' %}">点我看美女</a>

1. 无名分组反向解析

python 复制代码
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
  • 后端解析
python 复制代码
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)
  • 前端分析
python 复制代码
<a href="{% url 'home' 1 123 %}">点我看美女</a>

2. 有名分组反向分析

python 复制代码
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/$', views.home, name='home')
  • 后端分析
python 复制代码
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
res=reverse('home', kwargs={'year':123, 'mon':1}) # /v1/v2/v3/home/1
print(res)
  • 前端分析
python 复制代码
<a href="{% url 'home' year=1 mon=123 %}">点我看美女</a>

五、路由分发

Django的全局路由文件是urls.py这个文件

随着项目的复杂程度越来越来越大,路由肯定也是越来越多,路由文件就会增加很多的路由地址,就会导致路由文件很混乱,不好管理,也不够清晰,我们可以把总路由文件进行拆分,拆分到各个应用下面去,每一个应用都可以有自己的路由文件。

路由分发之后,总路由文件就不在作为地址匹配了,只是为了分发而已。

路由的分发

  • 分发的路由第一个参数最后一个不要加 $

方式一:

python 复制代码
url(r'^app01/', include(app01_urls)),
url(r'^app02/', include(app02_urls)),

方式二:

python 复制代码
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),

六、名称空间(了解)

  • 第二种方法
python 复制代码
url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),
  • 解析
python 复制代码
res=reverse('app01:login', args=(11,22)) # /v1/v2/v3/home/1
res=reverse('app02:login', args=(11,22)) # /v1/v2/v3/home/1

七、伪静态的概念(了解)

伪静态:其实就是把动态页面改成静态页面

动态页面:它不是在html页面中写死的,它是根据后端的数据变化而变化

  • 我们的页面上的数据是从数据库查询出来都是可以是动态页面

静态页面:

  • html
  • css

案例:https://www.cnblogs.com/bigsai/p/17827160.html -------》这个就是伪装之后的页面

伪装的目的:为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,seo

  • seo:优化关键词被容易搜索到
  • sem: 广告(RMB)

怎么样去伪装

python 复制代码
url(r'^v1/v2/test.html/$', views.test)

八、虚拟环境(了解)

以后针对于每一个独立的项目,都会去配置一个解释器,多个项目能不能使用同一个解释器,原则上是能的,我们会针对于不同的项目单独的配置一个新的解释器。

每一个解释器只装针对于这个项目的模块

我们会使用虚拟环境:类似于是一个纯净版本的Python解释器,虚拟环境你是需要自己下载的,下载的时候,使用的是哪个Python解释器版本,下载下来的就是这个版本的解释器,纯净版的。

注:不要频繁的创建虚拟环境,过多的虚拟环境肯定会占用资源。

九、Django1和Django2的区别

1. 路由文件

  • Django1.x中使用的是url:支持正则
  • Django2.x中使用的是path(不支持正则:精准匹配)和re_path(url):支持正则path,但是它只支持五种转换器。

Django默认支持以下5个转化器:

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

注册自定义转化器

对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:

  • regex 类属性,字符串类型
  • to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
  • to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

2. 创建表关系

  • Django2中必须指定参数:on_delete:
  • Djanxo1中不用指定:级联更新
相关推荐
小馒头学python1 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯10 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜22 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼26 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
时差95328 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式29 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
羊小猪~~30 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
放飞自我的Coder1 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn