0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入解析Django路由层:从基础配置到高效设计的全攻略

马哥Linux运维 来源:马哥Linux运维 2024-12-04 13:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、简介


# 路由匹配
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/(?Pd+)',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/(?Pd+)/(?Pd+)/(?Pd+)', views.test_add),

五 反向解析


# 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数


# 先给路由与视图函数起一个别名,别名不能起冲突(和static令牌的原理一样)
url(r'^func/',views.func,name='ooo')
# 反向解析
    # 后端反向解析
    from django.shortcuts import render, HttpResponse, redirect,reverse
    reverse('ooo')
    
    # 前端反向解析
    111

六 无名有名分组向反向解析


# 无名分组反向解析
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 %}
    编辑
{%endfor%}
点击编辑后,user_obj.id,反向解析,传给url,r'^edit_user/(d+)',数字传给视图函数edit.
'''


# 有名分组反向解析
url(r'^func/(?Pd+)/',views.func,name='ooo')


# 前端
有名分组,写法1
有名分组,写法2,简便写法


# 后端
    # 有名分组反向解析  写法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)
]

3ddab1d8-aca6-11ef-93f3-92fbcf53809c.png

八 名称空间(了解)


# 当多个应用出现了相同的别名,研究反向解析会不会自动识别应用前缀
# 总路由
    # 终极写法,推荐使用
    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

链接:https://www.cnblogs.com/coderxueshan/p/17590610.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 路由
    +关注

    关注

    0

    文章

    283

    浏览量

    43535
  • Django
    +关注

    关注

    0

    文章

    45

    浏览量

    10811

原文标题:深入解析Django路由层:从基础配置到高效设计的全攻略

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GPS 设计全攻略

    GPS 设计全攻略
    发表于 09-25 14:11

    LED技术全攻略

    LED技术全攻略
    发表于 09-25 14:16

    GPS 设计全攻略

    GPS 设计全攻略
    发表于 12-05 12:08

    GPS设计全攻略

    本帖最后由 zgzzlt 于 2012-8-16 13:58 编辑 GPS设计全攻略
    发表于 08-06 12:56

    LED技术全攻略

    本帖最后由 zgzzlt 于 2012-8-16 13:56 编辑 LED技术全攻略
    发表于 08-06 12:59

    MCU解密全攻略

    MCU解密全攻略
    发表于 08-19 14:28

    FPGA开发全攻略

    FPGA开发全攻略
    发表于 09-27 10:59

    FPGA开发全攻略

    FPGA开发全攻略
    发表于 05-21 09:28

    FPGA开发全攻略

    FPGA开发全攻略
    发表于 03-03 10:30

    FPGA开发全攻略

    FPGA开发全攻略
    发表于 03-07 11:46

    MCU解密全攻略

    本内容介绍了MCU解密的全攻略教程
    发表于 07-11 17:51 650次下载
    MCU解密<b class='flag-5'>全攻略</b>

    LED调光技术全攻略

    LED调光技术全攻略
    发表于 02-08 00:50 44次下载

    LED驱动电源方案全攻略

    LED驱动电源方案全攻略
    发表于 01-14 12:22 43次下载

    智能小车的DIY全攻略

    智能小车的DIY全攻略
    发表于 10-13 09:13 28次下载
    智能小车的DIY<b class='flag-5'>全攻略</b>

    GPS设计全攻略

    电子发烧友网站提供《GPS设计全攻略.pdf》资料免费下载
    发表于 12-01 17:10 0次下载