一、简介

# 路由匹配
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. MySQL的执行流程和执行顺序

    MySQL执行过程以及顺序 前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责.因为学习和了解MySQL是至关重要的,那么当我们在客户端 ...

  2. UUID算法:独一无二的标识符解决方案

    引言 在分布式系统和大数据环境下,唯一标识符的生成和管理是一项关键任务.UUID(Universally Unique Identifier)算法应运而生,成为了解决重复数据和标识符冲突的有效工具.本 ...

  3. CF1907

    A 模拟. B 模拟. C 若原字符串中出现次数最多的次数为 \(cnt\),答案是 \(\max(n\%2,cnt\times 2-n)\). D 二分 \(k\),然后从后往前倒,计算出到达每个线 ...

  4. JS leetcode 猜数字 题解分析,我以为题目在第八层我在第一层,其实我在第三层题目在第一层

    壹 ❀ 引 今天来做一道简单到让我一度怀疑题目本意的题目,题目来自leetcode LCP 01. 猜数字,题目描述如下: 小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个,小 ...

  5. NC20960 迪拜的超市

    题目链接 题目 题目描述 forever97家住迪拜一环,因此有很多大大小小的商场. 迪拜一环有n个超市,分别在坐标轴[1,n]位置,forever97家在0这个位置. 由于日常开销巨大,所以Trot ...

  6. Apache log4j2远程代码执行漏洞

    漏洞描述 Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了大量丰富的特性.该日志框架被大量用于业务系统开发,用来记录日志信息.大多数情况下,开发者可能 ...

  7. test-02-java 单元测试框架 junit5 入门介绍

    拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息 ...

  8. 【分布式】load balance 04-java 从零手写实现负载均衡

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 本节我们来看一下如何实现一负载均衡框架. 源码 核心接 ...

  9. Python三次样条插值与MATLAB三次样条插值简单案例

    1 三次样条插值 早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿木条画下曲线,成为样条曲线. 设函数S(x)∈C2[a,b] ,且在每个小区间[x ...

  10. Swoole从入门到入土(27)——协程[协程容器]

    这一章开始,我们要开始全方位讨论Swoole为我们提供的协程机制.在swoole中所有的协程必须在协程容器里面创建(Swoole\Coroutine\Scheduler),Swoole 程序启动的时候 ...