django框架——路由层 urls.py
路由层 urls.py
路由匹配
# 路由匹配
url(r'test',views.test),
url方法第一个参数是正则表达式
正则表达式能够匹配 就会立刻停止往下匹配
django 在url后面加斜杠重定向,如果匹配不成功
# 取消自动加斜杠
APPEND_SLASH = False/True
无名分组
url(r'^test/(\d+)/',views.test)
def test(request,xx):
return HttpResponse('test')
位置参数传递给视图函数
有名分组
url(r'^testadd/(?P<year>\d+)',views.testadd)
def testadd(request,year):
return HttpResponse('testadd')
关键字参数传递给视图函数
无名有名是否可以混合使用
不能混用 但是同一个分组可以使用多次
url(r'^index/(\d+)/(\d+)/(\d+)/',views.index),
url(r'^index/(?P<year>\d+)/(?P<age>\d+)/(?P<month>\d+)/',views.index),
反向解析
url(r'^func_kkk/',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(r'^func/(?P<year>\d+)/',views.func,name='ooo')
# 前端
<a href="{% url 'ooo' year=123 %}">111</a>
<a href="{% url 'ooo' 123 %}">222</a>
# 后端
reverse('ooo',kwargs={'year':123}
reverse('ooo',args=(111,))
统一用无名分组的反向解析形式就好
路由分发
django的每一个应用都可以有自己的 templates文件夹 urls.py static文件夹
所以,django能够非常好的做到 分组开发(每个人只写自己的app)
作为组长 只需要将手下书写的app全部拷贝到一个新的django项目中 然后在配置文件里面注册所有的app 再将所有的app整合起来
当一个django项目中的 url特别多 的时候 总路由urls.py代码非常冗余不好维护
可以利用路由分发来减轻总路由的压力
# 总路由
from app01 import urls as app01_urls
from app02 import urls as app02_urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 1.路由分发
url(r'^app01/',include(app01_urls)), # 只要url前缀是app01开头 全部交给app01处理
url(r'^app02/',include(app02_urls)) # 只要url前缀是app02开头 全部交给app02处理
# 2.终极写法 推荐使用 不需要再导入应用中的路由了
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
注意:总路由里面的url千万不能加$结尾
]
# 子路由
# app01 urls.py
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^reg/',views.reg)
]
# app02 urls.py
from django.conf.urls import url
from app02 import views
urlpatterns = [
url(r'^reg/',views.reg)
]
名称空间
当不同应用出现了相同的别名,导致反向解析不能正常使用
# 名称空间
# 总路由
url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02'))
# 解析的时候
# app01
urlpatterns = [
url(r'^reg/',views.reg,name='reg')
]
# app02
urlpatterns = [
url(r'^reg/',views.reg,name='reg')
]
reverse('app01:reg')
reverse('app02:reg')
{% url 'app01:reg' %}
{% url 'app02:reg' %}
如果名字不冲突 ,名称空间就不用了,加上app的前缀,确保名字不冲突
urlpatterns = [
url(r'^reg/',views.reg,name='app01_reg')
]
urlpatterns = [
url(r'^reg/',views.reg,name='app02_reg')
]
伪静态
静态网页:网页数据,不是动态从数据库获取的,本来就有的不变的。
动态网页:数据动态获取的。
伪静态:将一个动态网页伪装成静态网页
为什么要伪装呢?
https://www.cnblogs.com/Dominic-Ji/p/9234099.html
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网页的概率
搜索引擎本质上就是一个巨大的爬虫程序
总结:
无论你怎么优化 怎么处理
始终还是干不过RMB玩家
urlpatterns = [
url(r'^reg.html',views.reg,name='app02_reg')
]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现