django(路由层)
一、简介
# 路由匹配
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(路由层)的更多相关文章
- 关于Django路由层简单笔记
Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- Django路由层与视图层、pycharm虚拟环境
一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...
- Django 路由层(urlconf)
Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...
- Django路由层
路由层简单配置 urlpatterns = [ url(r'^admin/$', admin.site.urls), url(r'^articles/2003/$', views.special_ca ...
- Django --- 路由层(urls)
目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...
- django 路由层 伪静态网页 虚拟环境 视图层
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...
- django 路由层(反向解析)03
目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...
- Django 路由层与视图层
1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...
- Django路由层、视图层
一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...
随机推荐
- electron、nodejs、typescript、idea 组合开发,安装和配置 以及错误 等 详细说明
1. 创建项目,创建时 选择 nodejs 项目,因为 开发 electron 与 开发 nodejs 基本一致. 2.安装 electron npm i -D electron@beta 看目录 ...
- MySQL-顺序IO和随机IO的区别
顺序IO是指读写操作的访问地址连续.在顺序IO访问中,HDD所需的磁道搜索时间显着减少,因为读/写磁头可以以最⼩的移动访问下一个块.数据备份和日志记录等业务是顺序IO业务.随机IO是指读写操作时间连续 ...
- MaxCompute(ODPS)和Hive的区别
Hive概述 架构于Hadoop之上,可以将结构化的HDFS文件映射成一张表,并提供了类似于SQL语法的HQL查询功能. 核心本质:将HQL语句转换成MapReduce任务. Hive的优缺点 优点 ...
- Guava EventBus的具体使用以及源码解析
使用Guava EventBus对系统进行异步解耦改造 一.背景 最近在写的项目里,在使用定时器进行自动任务下派时,发现之前写的程序中将包括启动流程.地图更新.发送短信.效能计算等操作全部集成在同一个 ...
- The Missing Semester - 第五讲 学习笔记
第五讲 命令行环境 课程视频地址:https://www.bilibili.com/video/BV1Dy4y1a7BW 课程讲义地址:https://missing-semester-cn.gith ...
- 一文总结 C++ 常量表达式、constexpr 和 const
TLDR 修饰变量的时候,可以把 constexpr 对象当作加强版的 const 对象:const 对象表明值不会改变,但不一定能够在编译期取得结果:constexpr 对象不仅值不会改变,而且保证 ...
- Swoole从入门到入土(9)——TCP服务器[协程风格]
上一篇,我们一起初步接触了协程.我相信只有一节的讨论,很多小伙伴对于"协程"与"线程"的区分可能还有点模糊.我们这里以两者的比较作为本篇开头,进行一番比较. 首 ...
- 2021-07-30 JavaScript中常用数据的判断
为什么要判断一个变量的常用数据? 实际业务场景里,一个变量的数据是否合法或符合预期,会影响到项目中用到的UI组件库特定组件的运行.比如element-ui中的el-select组件,单选时绑定的数据不 ...
- go语言range语句中的值的坑
在range语句中生成的数据的值是真实集合元素的副本,它们不是原有元素的引用.这意味着更新这些值将不会 修改原来的数据,同时也意味着使用这些值的地址将不会得到原有数据的指针. package main ...
- npm模块全局安装后无法使用解决方案
好家伙 npm模块全局安装后无法使用 估计是少配了环境变量 1.使用命令: npm config get prefix 找到全局包的安装位置 2.随后我们右键"我的电脑"打 ...