Django基础2——URL路由系统

这篇具有很好参考价值的文章主要介绍了Django基础2——URL路由系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基本了解

概念:

  • 路由系统就是URL路径和视图函数的一个对应关系,也可以称为转发器。

1.文件urls.py编写语法。

##定义文件devops/urls.py

urlpatterns = [
    path(regex, view, kwargs=None, name=None)
]
参数 释义
urlpatterns 一个列表,每一个path()函数是一个元素,对应一个视图
regex 一个字符串或者正则表达式,匹配URL
view 对应一个函数视图或者类视图(as_view()的结果),必须返回一个HttpResponse对象,Django将这个对象转换成一个HTTP响应
kwargs 可选,字典形式数据传递给对应视图
name 可选,URL名称

2.文件使用方法种类。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

二、url路由分发

优点:

  • urls配置解耦,方便管理

原理:

  1. 浏览器访问项目根urls.py文件中的路由规则,通过其中定义的路由规则转发到具体的子urls.py文件中。
  2. 子urls.py文件再调用对应的函数,最终返回一个应用效果。
    Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

1.定义根路由规则,文件为devops/urls.py。

from django.contrib import admin
from django.urls import path,include
from devops import views

urlpatterns = [
    path('index/', views.index),
    path('admin/', admin.site.urls),
    path('logs/', views.logs),
    path('apm/', include('apm.urls')),   ##访问http://xxx/apm/qingjun
    path('ivpm/', include('ivpm.urls'))   ##访问http://xxx/ivpm/baimu
]

2.定义子路由规则。

##第一个文件apm/urls.py
from django.urls import path
from apm import views

urlpatterns = [
    path('qingjun/', views.wuhan),
]


##第二个文件apm/urls.py
from django.urls import path
from ivpm import views

urlpatterns = [
    path('baimu/', views.beijing),
]

3.定义视图函数。

##第一个路由规则指定的视图函数,文件为apm/views.py。
from django.shortcuts import render,HttpResponse

def wuhan(request):
    return HttpResponse("这是第一个功能首页!!")


##第二个路由规则指定的视图函数,文件为ivpm/views.py。
from django.shortcuts import render,HttpResponse

def beijing(request):
    return HttpResponse("这是第二个功能首页!!")

4.访问网页,验证效果。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

三、正则匹配

  • URL路径可以使用正则表达式匹配,re_path()替代path()。

1.正常匹配效果,需要在输入uri。

##url路由系统。
from django.contrib import admin
from django.urls import path,include,re_path    ##导入re_path模块。
from devops import views

urlpatterns = [
    path('index/', views.index),   ##正常匹配。
    path('admin/', admin.site.urls),
]


##函数视图。
from django.shortcuts import render,HttpResponse
def index(request):
    return HttpResponse("首页")

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

2.使用正则匹配首页,不需要输入uri示例。

##url路由系统。
from django.contrib import admin
from django.urls import path,include,re_path    ##导入re_path模块。
from devops import views

urlpatterns = [
    # path('index/', views.index),   ##正常匹配。
    re_path('^$', views.index),      ##使用正则匹配。
    path('admin/', admin.site.urls),
]


##函数视图。
from django.shortcuts import render,HttpResponse
def index(request):
    return HttpResponse("首页")

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

四、压缩归档超链接

  • 实现在网页上点击一个超链接,会跳转到第二个网页,以此类推。

1.实现网站首页显示超链接。

##############################################################
1、视图文件:devops/views.py
from django.shortcuts import render,HttpResponse
def index(request):
    return render(request,'index.html')

##############################################################
2、根路由系统文件:devops/urls.py
from django.contrib import admin
from django.urls import path,re_path
from devops import views

urlpatterns = [
    re_path('^$', views.index),
    path('admin/', admin.site.urls),
    re_path('^articles/([0-9]{4})/$', apm_views.year_articles),
    re_path('^articles/([0-9]{4})/([0-9]{2})/$', apm_views.month_articles),
    re_path('^articles/([0-9]{4})/([0-9]{2})/([0-9]+)$', apm_views.id_articles)
]

##############################################################
3、编写步骤2中转发的apm_views视图函数,apm/views.py文件。
def year_articles(request,year):
    return HttpResponse("这里是%s年的文章" %year)

def month_articles(request,year,month):
    return HttpResponse("这里是%s年%s月的文章" %(year,month))

def id_articles(request,year,month,id):
    return HttpResponse("这里是%s年%s月的文章id%s" %(year,month,id))

##############################################################
4、创建template/index.html模板文件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
</head>
<body>
<h1>博客文章归档</h1>
<a href="http://127.0.0.1:8000/articles/2020/">2020年的文章(70)</a><br>
<a href="http://127.0.0.1:8000/articles/2020/10">2020年10月的文章(13)</a>
</body>
</html>

##释义。
<a href=“超连接地址">自定义显示文字</a>   
##<br>表示转义换行。

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

2.验证超链接效果。点击”2020年的文章(70)“会跳转到如下页面。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux
3.验证归档效果。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

优化一:使用分组名称功能

1.不使用分组效果时,需要根据视图函数中的位置变量进行传参,位置一对一,不然就会显示错乱。

##如下是视图函数文件views.py内容,year、month、id参数是从根urls.py文件中的分组传来的,第一个分组传year,第二个分组传到month,第三个分组传到id。

def id_articles(request,year,month,id):
    return HttpResponse("这里是%s年%s月的文章id%s" %(year,month,id))


##############################################################
##根urls.py文件。
urlpatterns = [
    ......
    re_path('^articles/([0-9]{4})/([0-9]{2})/([0-9]+)$', apm_views.id_articles)
]

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

2.使用分组名称就可以解决这个问题,视图函数中的参数位置不再受到限制,可以随意调换位置。

##根urls.py文件,使用分组名称。
urlpatterns = [
    ......
    re_path('^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<id>[0-9]+)$', apm_views.id_articles)
]

##############################################################
##调换位置参数id和month位置。
def id_articles(request,year,id,month):
    return HttpResponse("这里是%s年%s月的文章id%s" %(year,month,id))

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

优化二:使用url名称功能

  • 在前端代码里经常会指定URL,例如超链接,提交表单等,倘若超链接地址发生改变,使用上文的那种硬编码写法就会报错,此时就需要批量修改超链接的新地址,这时用URL反查就方便多了。
示例 语法
之前 <a href=“/hello”>你好
之后 <a href=“{% url ‘hello’ %}”>你好

4.1 使用功能之前效果展示

1.代码如下。

##############################################################
1、根路由规则文件urls.py。
from django.contrib import admin
from django.urls import path,include,re_path
from devops import views
from apm import views as apm_views

urlpatterns = [
    re_path('^$', views.index),
    path('admin/', admin.site.urls),
    path('logs/', views.logs),
    path('apm/', include('apm.urls')),
    path('ivpm/', include('ivpm.urls')),       ##看这行,效果实现转发url到ivpm.urls文件。
    re_path('^articles/([0-9]{4})/$', apm_views.year_articles),
    re_path('^articles/([0-9]{4})/([0-9]{2})/$', apm_views.month_articles),
    re_path('^articles/([0-9]{4})/([0-9]{2})/([0-9]+)$', apm_views.id_articles)
]

##############################################################
2、子路由规则文件ivpm/urls.py文件。
urlpatterns = [
    path('baimu/', views.beijing),     ##转发到ivpm/views文件中的beijing函数。
]

##############################################################
3、子路由系统转到到视图函数。
from django.shortcuts import render,HttpResponse

def beijing(request):
    return HttpResponse("这是第二个功能首页!!")

##############################################################
4、模板文件template/index.html。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
</head>
<body>
<h1>博客文章归档</h1>
<a href="http://127.0.0.1:8000/articles/2020/">2020年的文章(70)</a><br>
<a href="http://127.0.0.1:8000/articles/2020/10">2020年10月的文章(13)</a><br>
<a href="http://127.0.0.1:8000/ivpm/baimu">返回到第2个模块首页</a>
##<a href="ivpm/baimu">返回到第2个模块首页</a>   ##与上面一行效果一样,使用相对路径。
</body>
</html>

2.正常访问子路由规则文件ivpm/urls.py文件中定义的访问路径。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux
3.当子路由规则文件ivpm/urls.py文件中定义的访问路径更新后,那原来的代码就不能正常访问指定页面了。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux
4.可以通过更改代码恢复原来的访问效果。如此可见很是麻烦,所以常常给url定义名称,对其名称进行引用。
Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux

4.2 使用功能之后效果展示

1.修改子路由规则文件ivpm/urls.py文件,对url进行命名。

urlpatterns = [
    path('baimu33/', views.beijing,name='baimu'),
]

2.修改模板文件template/index.html,引用url名称,这样依赖后面的超链接地址被改变会自动转发到正确地址。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
</head>
<body>
<h1>博客文章归档</h1>
<a href="http://127.0.0.1:8000/articles/2020/">2020年的文章(70)</a><br>
<a href="http://127.0.0.1:8000/articles/2020/10">2020年10月的文章(13)</a><br>
<a href="{% url 'baimu' %}">返回到第2个模块首页</a>    ##固定语法,baimu表示url名称。
</body>
</html>

Django基础2——URL路由系统,python,django,sqlite,数据库,python,linux文章来源地址https://www.toymoban.com/news/detail-666000.html

到了这里,关于Django基础2——URL路由系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Python+Django]Web学生信息管理系统数据库设计及系统实现

    本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能。 简单的包装下毕设应该没问题了。 Python,Mysql,Pycharm的安装本文就不做特别介绍了,有需要的同学请参考如下博文。 Python + Django4 搭建个人博客(二):准备开

    2024年02月03日
    浏览(62)
  • 【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月07日
    浏览(88)
  • Django基础入门⑧:Django路由详细讲解

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 路由分发函数

    2024年02月12日
    浏览(45)
  • Django基础入门⑨:Django路由Path方法

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 path()方法 pat

    2024年02月11日
    浏览(45)
  • Python代码片段之Django静态文件URL的配置

    首先要说明这段python代码并不完整,而且我也没有做过测试,只是我在工作时参考了其中的一些个方法。这是我在找python相关源码资料里看到的一段代码,是 Django 静态文件URL配置代码片段2,代码中有些方法还是挺技巧的,做其它操作时可以参考着使用。需要完整代码的伙伴

    2024年02月15日
    浏览(45)
  • Django基础讲解-路由控制器和视图(Django-02)

    参考链接: Django源码阅读:路由(二) - 知乎 Route路由, 是一种映射关系!路由是把客户端请求的  url路径与视图进行绑定  映射的一种关系。 这个/timer通过路由控制器最终匹配到myapp.views中的视图函数 timer 。 在django中所有的路由最终都被保存到一个变量 urlpatterns , urlpatt

    2024年02月07日
    浏览(32)
  • 基于区块链和门限密码的安全投票系统(Python+Django+Node+web3+SQLite3) 毕业论文+文献综述+方案对比+图形源文件+参考文献+项目源码

    2022年1月28日,中国创建首个区块链与隐私计算科技创新平台,为解决多方协作和多方信任等安全性问题提供了有力支持。区块链实现数据可信存储,隐私计算保护实体秘密提供可信计算,如果将隐私计算的数据部署到区块链,并由智能合约触发,那么可以解决传统领域各种

    2024年02月05日
    浏览(53)
  • Django实战项目-学习任务系统-自定义URL拦截器

    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 首先增加URL拦截器,你不会希望没有登录用户就可以进入用户主页各种功能的,所以增加URL拦截器可以解决这个问题。 Django框架本身也有URL拦截器,但是因为本系统用户模型跟Django框架本身用户模

    2024年02月06日
    浏览(40)
  • Django基础入门⑩:Django查询数据库操作详讲

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 添加数据 存储

    2024年02月13日
    浏览(51)
  • Python学习之路:Django项目遇到ImportError: cannot import name ‘url‘ from ‘django.conf.urls‘解决方法(亲测有效)

    配置:Pthon 3.8.10-Django 4.1.1 使用命令创建数据库时: python manage.py migrate 提示错误:  from django.conf.urls import re_path as url ImportError: cannot import name \\\'re_path\\\' from \\\'django.conf.urls\\\' 经查阅相关资料,并实际操作,解决问题,具体办法往下: 修改生成项目下的urls.py文件中的:from django.c

    2023年04月21日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包