一、简介

# 路由匹配
url(r'test',views.test),
url(r'test_add',views.test_add)
# r'test'与请求头的数据进行正则匹配 '''
url方法第一个参数是正则表达式
只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配
直接执行对应的视图函数 在输入url的时候默认加斜杠
django内部帮你做到重定向
一次匹配不行
url后面加斜杠再来一次(浏览器加/后,再请求)
''' # 取消自动加斜杠
APPEND_SLASH = False # 默认是True,自动加斜杠 urlpatterns = [
url(r'^admin/', admin.site.urls),
# 首页
url(r'^$',views.home),
url(r'^test/$',views.test),
url(r'^test_add$',views.test_add),
# 尾页(了解)
url(r'',views.error)
]

二 无名分组

分组:就是给某一段正则表达式用小括号括起来
url(r'^test/(\d+)',views.test)
def test(request,xx):
print(xx) # xx位置参数就是(\d+)匹配到的数字
return HttpResponse('TEST') # 无名分组就是将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数(args)

三 有名分组

可以给正则表达式起一个别名,\d+的别名就是year
url(r'^test_add/(?P<year>\d+)',views.test_add)
def test_add(request,year):
print(year)
return HttpResponse('TEST_ADD') # 有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数(kwgs)

四 无名和有名不能混用

# 无名有名不可以混用,但同一个分组可以使用N次
url(r'^test/(\d+)/(\d+)/(\d+)', views.test),
url(r'^test_add/(?P<year>\d+)/(?P<year>\d+)/(?P<year>\d+)', views.test_add),

五 反向解析

# 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数

# 先给路由与视图函数起一个别名,别名不能起冲突(和static令牌的原理一样)
url(r'^func/',views.func,name='ooo')
# 反向解析
# 后端反向解析
from django.shortcuts import render, HttpResponse, redirect,reverse
reverse('ooo') # 前端反向解析
<a href="{% url 'ooo' %}">111</a>

六 无名有名分组向反向解析

# 无名分组反向解析
url(r'^index/(\d+)',views.index,name='xxx') # 前端
{% url 'xxx' 123 %} # 后端
reverse('xxx',args=(1,)) '''
这个数字写代码的时候应该放什么
数字一般情况下放的是数据的主键值 数据的编辑和删除 伪代码(数据的编辑和删除),前端数据反向解析给url
def edit(request,edit_id)
reverse('xxx',args=(edit_id)) listuser.html 数据展示页
{%for user_obj in user_queryset %}
<a href="{% url 'xxx' user_obj.id %}">编辑</a>
{%endfor%}
点击编辑后,user_obj.id,反向解析,传给url,r'^edit_user/(\d+)',数字传给视图函数edit.
'''
# 有名分组反向解析
url(r'^func/(?P<year>\d+)/',views.func,name='ooo') # 前端
<a href="{% url 'ooo' year=123 %}">有名分组,写法1</a>
<a href="{% url 'ooo' 123 %}">有名分组,写法2,简便写法</a> # 后端
# 有名分组反向解析 写法1
print(reverse('ooo', kwargs={'year': 123}))
# 简便写法
print(reverse('ooo',args=(111,)))

七 路由分发

django的每一个应用都可以有自己的templates文件夹、urls.py、static文件夹
基于上述特点,django能够做到分组开发(每个人写自己的app)
作为组长,只需要将手下书写的app全部拷贝到一个新的django项目中,

然后在配置文件里,注册所有的app再利用路由分发的特点将所有的app整合起来。

当一个django项目中的url特别多的时候,总路由url.py代码非常冗余不好维护,这个时候也可以利用路由来减轻总路由的压力。

利用路由分发之后,总路由不再干路由与视图函数的直接对应关系
而是做一个分发处理,识别当前url是属于那个应用下的,直接分发给对应的应用去处理。

# 总路由
# from app01 import urls as app01_urls
# from app02 import urls as app02_urls urlpatterns = [
url(r'^admin/', admin.site.urls), # 路由分发
# url(r'^app01/', include(app01_urls)), # 只要url前缀是app01开头 全部交给app01处理
# url(r'^app02/', include(app02_urls)), # 终极写法,推荐使用
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
# 注意事项:总路由里面的url千万不能加$结尾
] # 子路由
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^reg/', views.reg)
]

八 名称空间(了解)

# 当多个应用出现了相同的别名,研究反向解析会不会自动识别应用前缀
# 总路由
# 终极写法,推荐使用
url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02'))
# 注意事项:总路由里面的url千万不能加$结尾
] # 解析的时候
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^reg/', views.reg,name='reg')
] def reg(request):
# print(reverse('reg'))
print(reverse('app01:reg'))
return HttpResponse('app01 reg') def reg(request):
# print(reverse('reg'))
print(reverse('app02:reg'))
return HttpResponse('app02 reg') # 只要保证名字不冲突,就没必要使用名称空间 '''
一般情况下,有多个app的时候,起别名的时候会加上app的前缀
这样的话能够确保多个app之间名字不冲突的问题,解决 反向解析时不会出错。
'''

九 伪静态(了解)

静态网页
数据是写死的,万年不变

伪静态
将一个动态网页伪装成静态网页

为什么要伪装
https://www.cnblogs.com/Dominic-Ji/p/10881214.html
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网站的概率

搜索引擎的本质上就是一个巨大的爬虫程序

总结:
无论你怎么优化,怎么处理
始终还是干不过RMB玩家

url(r'^reg.html/', views.reg,name='reg')

十  更多详细参考

https://www.cnblogs.com/xiaoyuanqujing/articles/11642628.html

 

django(路由层)的更多相关文章

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

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

  2. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  3. Django路由层与视图层、pycharm虚拟环境

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  4. Django 路由层(urlconf)

    Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...

  5. Django路由层

    路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...

  6. Django --- 路由层(urls)

    目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...

  7. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  8. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  9. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  10. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

随机推荐

  1. 小知识:Linux如何删除大量小文件

    环境:RHEL 6.5 + Oracle 11.2.0.4 需求:使用df -i巡检发现Inodes使用率过高,需要清理删除文件来解决.如果Inodes满,该目录将不能写,即使df -h查看还有剩余空 ...

  2. 如何使用graalvm为带有反射功能的java代码生成native image

    译自Configure Native Image with the Tracing Agent graal官方文档 , 以下所有命令需要在linux环境下操作,graalvm也支持windows. 要 ...

  3. Base64编码的优点与缺点

    Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式.它被广泛应用于数据传输和存储,以提升数据的可读性.可传输性和安全性. Base64编码解码 | 一个覆盖广泛主题工具的高效在线平 ...

  4. CF1425F Flamingoes of Mystery 题解

    题目传送门 前置知识 前缀和 & 差分 解法 令 \(sum_k=\sum\limits_{i=1}^{k} a_k\).考虑分别输入 \(sum_2 \sim sum_n\),故可以由于差分 ...

  5. 西门子SIMATIC LPMLV30 库的模式和状态管理器

    从基于S7-1200 / S7-1500的OMAC PackML V3.0获取到的文章内容,用于记录查看 基本信息 根据PackML_V3.0,该库包含了用于机械模式和状态管理器的功能模块. • 机械 ...

  6. NC19885 [AHOI2009]CHESS 中国象棋

    题目链接 题目 题目描述 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.一个炮要能攻击另一个炮他们必须要 ...

  7. 【Unity3D】空间和变换

    1 空间 1.1 左右手坐标系及其法则 1.1.1 左右手坐标系 左手坐标系与右手坐标系 ​ Unity 局部空间.世界空间.裁剪空间.屏幕空间都采用左手坐标系,只有观察空间采用右手坐标系. ​ 左右 ...

  8. 【LeetCode剑指offer#05】回文链表的两种解法+删除链表中间节点(链表的基本操作)

    回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表.如果是,返回 true :否则,返回 false . 示例 1: 输入:head = [1,2,2,1] 输出:true 示 ...

  9. 【LeetCode栈与队列#03】删除字符串中所有的相邻重复项

    删除字符串中所有的相邻重复项 力扣题目链接(opens new window) 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们. 在 S 上反复执行重复项删除操作 ...

  10. 【Azure Key Vault】客户端获取Key Vault机密信息全部失败问题分析

    问题描述 在应用中获取存储在Azure Key Vault的机密信息,全部失败. 报错日志内容如下: [reactor-http-epoll-4] [reactor.netty.http.client ...