Django-路由层
目录
-路由匹配
-无有名分组
--无名分组
--有名分组
-反向解析
--含义
--实现
--无有名分组反向解析
---无名分组反向解析
---有名分组反向解析
-路由分发
--含义
--实现
-名称空间
-伪静态网页
-路由匹配
对django1.x,路由匹配用的是url正则匹配;django2.x和django3.x有直接匹配path和正则匹配re_path两种方式
# django 1.x
urlpatterns = [url(正则表达式,view视图函数,参数,别名),
]# django 2.x 和 django 3.x
urlpatterns = [path(匹配表达式,view视图函数,参数,别名),
]urlpatterns = [re_path(正则表达式,view视图函数,参数,别名),
]
路由匹配时,是将urlpatterns列表循环匹配,只要第一个匹配的参数能匹配到,就自动调用视图函数执行而不再继续往下匹配了
我们在浏览器输入url没有加最后一个"/"时也会匹配成功,因为django自动帮你做了重定向,一次匹配不行,就自动后面拼接上"/"再匹配
# 取消django路径下默认给你加/的方法
settings.pyAPPEND_SLASH = Flase
在使用正则匹配时,要用^和$限制路径,否则会出现:
from django.urls import re_pathurlpatterns = [re_path('test/', views.test),
]# 正则匹配若不限制^和$会导致路径的不专一
.../test/weer 也能匹配到test/路径下的视图函数
.../weer/test/ 也能匹配到test/路径下的视图函数
.../weer/test/abc123 也能匹配到test/路径下的视图函数# 而使用限制时:re_path('^test/$', views.test())就只能通过.../test/匹配到了
-无有名分组
无有名分组利用的是正则匹配,就是将路径中的一些值用参数包起来当做值,可以传入其它地方比如视图函数中使用
--无名分组
将括号内正则表达式的匹配内容当做位置参数传给视图函数,即视图函数多个形参urls.pyre_path('^test/(\d+)/$', views.test),views.pydef test(request, num):print(num)return HttpResponse('test')'''
即此时路径需输入test/数字/才能访问到test函数下的内容,
且test函数必须传入一个形参(这是num)来接收输入的数字,
否则会报test() takes 1 positional argument but 2 were given的错。
传入形参num后还能得到用户输入的路径后的数字
'''
--有名分组
将括号内的正则表达式匹配到的内容当做关键字参数(一般是给正则表达式起个别名当做关键字参数)传递给后面的视图函数urls.pyre_path('^testadd02/(?P<number>\d+)', views.test_add_02),views.pydef test_add_02(request, number):print(number)return HttpResponse('test_add_02')'''
就是用语法给正则式起个别名分组,作为传入视图函数的形参用来接收
也能获取用户输入的路径后的内容(这是数字)
'''
注:有名无名不能混合使用,但同一个分组下可以多次使用
re_path('^index/(\d+)/(\d+)/', views.index),re_path('^index/(?P<year>\d+)/(?P<month>\d+)/', views.index),
-反向解析
--含义
指通过一些方法得到一个结果,该结果可以直接对应访问url触发视图函数
用途:比如可以实现后端路由路径名改变,导致前端绑定跳转地址无用,减少前端页面一个一个改的繁琐;后端获取到的路径无,重新修改代码获取等…
--实现
→先给路由与视图函数起一个别名:path('hello/', views.hello, name = 'wmq'), # 别名不能冲突!
→反向解析:前端反向解析:<a href="{% url 'wmq' %}">111</a>后端反向解析:from django.shortcuts import reverseprint(reverse('wmq')) # 获取别名wmq对应路径,即:/hello/
--无有名分组反向解析
就是利用正则匹配方式的路径,给起起个别名,前后端通过别名并传入必要参数(在reverse那传入因有无名分组所需的必要参数即可,若为数字一般为其主键id)来实现访问该路径
---无名分组反向解析
# 无名分组反向解析
re_path('^index/(\d+)/$', views.index, name='weer'),# 前端
{% url 'weer' 666 %} # 传入别名和所需参数# 后端
def test(request, num):print(reverse('weer', args=(123,))) # /index/123/...
---有名分组反向解析
# 有名分组反向解析
re_path('^func/(?P<number>\d+)/$', views.fucn, name='weer'),# 前端
# <a href="{% url 'weer' number=666 %}">click me</a> # 了解
<a href="{% url 'weer' 666 %}">click me</a> # 简便写法,掌握# 后端
# print(reverse('weer', kwargs={'number':666})) # 了解
print(reverse('weer', args=(666, ))) # 简便写法,不用记参数叫什么,掌握
-路由分发
--含义
Django的每一个项目都可以有自己的templates文件夹、urls文件夹、static文件夹
正是由于这个特点,Django项目能做到分组开发(每个人写自己的app)
然后由组长通过路由分发实现在一个项目中汇总到总路由中
--实现
# 子路由
# app01/urls.py
from django.urls import path
from app01 import views
urlpatterns = [path('login/', views.login),
]
# app02/urls.py
from django.urls import path
from app02 import views
urlpatterns = [path('login/', views.login),
]总路由urls.py
# 方式一
from django.urls import path,include
from app01 import urls as app01_urls # 起别名,防冲突
from app02 import urls as app02_urlsurlpatterns = [path('admin/', admin.site.urls),# 路由分发↓path('app01/', include(app01_urls)), # 只要路由前缀是app01就由app01中的视图函数处理path('app02/', include(app02_urls)), # 只要路由前缀是app02就由app02中的视图函数处理
]# 方式二 推荐使用
from django.urls import path,include
import app01
import app02urlpatterns = [path('admin/', admin.site.urls),# 路由分发↓path('app01/', include('app01.urls')), path('app02/', include('app02.urls')),
]
-名称空间
各子路由下视图函数名有相同情况下,反向解析不能实现自动识别各应用下的视图函数名,此时需要使用名称空间
# 在总路由中加一个namespace = ' '参数,解析时前后端各自解析# 总路由
path('app01/', include('app01.urls'), namespace='app01'),
path('app02/', include('app02.urls'), namespace='app02'),
# app01
urlpatterns = [path('login/', views.login, name='xxx'),
]
# app02
urlpatterns = [path('login/', views.login, name='xxx'),
]# 解析 语法:'命名空间名称:URL名称'
path1 = reverse('app01:xxx')
path2 = reverse('app01:xxx'){% url 'app01:xxx' %}
{% url 'app02:xxx' %}
-伪静态网页
静态网页:数据是写死的,万年不变 伪静态网页:将一个动态网页伪装成一个静态网页
目的:增大本网页被搜索引擎收录的概率,增大本网站的seo查询力度
(搜索引擎本身是一个巨大的爬虫程序,它知道你是个静态网页后就会优先把你收录起来因为你的内容数据不变嘛,所以下次用户搜索展示的时候就可能会优先展示该网页)
比如把路径后缀加一个.html,看似是一个html静态文件,就实现了粗浅的伪装
但总结:无论我们怎么优化怎么伪装,都干不过RMB玩家
搜索引擎还是会优先展示RMB玩家的内容/网页
Django-路由层相关推荐
- 关于Django路由层简单笔记
Django-路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- 05 django路由层
路由 顾名思义,就是指路牌,请求过来根据指路牌的指示指向不同的视图函数. 路由层主要掌握: re_path正则匹配路径: 满足条件的都走同一个视图函数,多用在请求数据,比如图书馆,那一个书架哪一本书, ...
- Django—路由层,视图层
路由层urls 浏览器会自动给url后加一个"/" django会自动给路由的正则表达式前面加一个"/" django会给任何不带"/"结尾 ...
- Django 路由层
Django的下载与基本命令 下载Django:pip3 install django==2.0.1 创建一个django project: django-admin startproject luf ...
- django models索引_Django(生命周期、每部分详解、路由层)
https://www.zhihu.com/video/1248736141978927104 每日测验 """ 今日考题 1.什么是静态文件,django静态文件配置如 ...
- Django之路由层、视图层、模板层介绍
一.Django请求生命周期 1.路由层urls.py Django 1.11版本 URLConf官方文档 1.1 urls.py配置基本格式 from django.conf.urls import ...
- django框架之路由层 视图层......
Django 框架结构: urlspy:路由层 views.py:视图层 templates:模板层 models.py:模型层 路由层 数据处理结果request,是由wsgiref完成 1. 路由 ...
- Django之路由层
天行健,君子以自强不息 -周易 文章目录 路由层 一.路由层之路由匹配 1.什么是路由 2.路由匹配 URL( )方法 基本格式: 参数介绍: regex: view: kwargs name 示例: ...
- Django路由与视图
路由层 一.路由匹配规则: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数 url(r'login', views.login), 如果按上面的形 ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
阅读目录 一.路由层:(Django的路由系统) 二.伪静态网页和虚拟环境: 三.FBV与CBV.JsonResponse.文件上传 一.路由层:(Django的路由系统) URL配置(Django项 ...
最新文章
- android多渠道自动打包工具,Android多渠道打包工具
- FFmpeg常用命令合集
- python画代码流程图_Python使用graphviz画流程图过程解析
- 【Java每日一题】20170309
- 01-09 Linux三剑客-sed
- “echo ”和“echo ”的区别
- Atitit 跨平台跨语言图像处理与node.js图像处理之道 attilax著 1. 著名跨语言类库 ImageMagick简介、GraphicsMagick、命令行	1 1.1. opencv
- postgresql是如何求年龄的_负债累累如何度过难关?她依靠此法三年还清300多万债务!...
- xci转化nsp_XCI转NSP格式 图文教程
- SIMULINK模型自动生成Verilog代码
- 在word里打勾的方法
- 大数据解决方案,案例分享
- m3u8转MP4 视频最最有效的办法!!!!!!!
- 进行的vistor实验
- 移动商务进入战国时代 08年市场规模达306.5亿
- Mysql 主从架构之-主从配置
- 使用css形变实现一个立方体
- 网络传输介质有哪几种
- 深度学习: 细粒度图像分类 (fine-grained image recognition)
- Win11系统新建的excel表格怎么保存到桌面?
热门文章
- 如何将IDEA(2021)maven项目导入myeclipse2019
- 斩获殊荣!香港中雲科技有限公司荣获“分布式文件系统创新奖”
- Debian 10 更改系统语言(由中文改为英文)
- QQImage ubuntu20.04版本中文输入问题
- PyQt5 发送信号
- JAVA高效学习方法的陈词滥调,给机会一个机会
- python通过字符串来调用函数
- STM32(3日学习总结|应声虫——串口接收再发送)
- TwoSampleMR-R教程 两样本孟德尔随机化(原来真的就是这么简单……)
- UAP开发步骤详解(很详细)--③单据向导完善