一、简介

# 路由匹配
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. JS Leetcode 525. 连续数组 前缀和加哈希表,小白式讲解让你彻底明白此题

    壹 ❀ 引 题目来自LeetCode的525. 连续数组,难度中等,题目描述如下: 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度. 示例 1 ...

  2. 多线程系列(二) -Thread类使用详解

    一.简介 在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率. 其中java.lang.Thread是 Java 实现多 ...

  3. NC51222 Strategic game

    题目链接 题目 题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he cannot ...

  4. SATA学习笔记——名词解释

    SATASATA(Serial Advanced Technology Attachment,串行高级技术附件)是一种基于行业标准的串行硬件驱动器接口,是由Intel.IBM.Dell.APT.Max ...

  5. Ubuntu 22.04 Samba 安装和配置

    安装 安装 sudo apt install samba 检查服务状态 systemctl status smbd --no-pager -l 检查是否启用(开机自启动) systemctl is-e ...

  6. 【Unity3D】角色控制器(CharacterController)

    1 简介 ​ 控制角色移动的组件主要有:Transform 组件.Rigidbody 组件.CharacterController 组件.Transform 组件通过控制角色位置实现移动,Rogidb ...

  7. Js中Number对象

    Js中Number对象 JavaScript的Number对象是经过封装从而能够处理数字值的对象,Number对象由Number()构造器以及字面量声明的值在转化为包装对象时创建,JavaScript ...

  8. java数组实现的超市管理系统(控制台)

    说明:使用数组存储数据,针对用户功能1:增加用户2:删除用户3:修改用户:针对商品功能:1.显示所有商品2.修改商品信息3.添加商品信息4.删除商品信息5.查询商品信息 效果展示 ========== ...

  9. 在写dockerfile时替换国内源

    众所周知,Debian是linux发行版中官方源最难用的一个,这个傻逼源让我再构建docker镜像时卡了很久. ​ 那么能不能替换构建dockerfile时使用的源呢?显然是可以的 ​ 在与Docke ...

  10. 面向开发者的 ChatGPT 提示工程课程|吴恩达携手OpenAI 教你如何编写 prompt

    提示工程(Prompt Engineering)是一门相对较新的学科,旨在开发和优化提示,从而高效地将语言模型(LM)用于各种应用和研究主题,并帮助开发人员更好地理解大型语言模型(LLM)的能力和局限 ...