Django基础2——URL路由系统

news2025/6/19 19:08:26

文章目录

  • 一、基本了解
  • 二、url路由分发
  • 三、正则匹配
  • 四、压缩归档超链接
    • 优化一:使用分组名称功能
    • 优化二:使用url名称功能
      • 4.1 使用功能之前效果展示
      • 4.2 使用功能之后效果展示

一、基本了解

概念:

  • 路由系统就是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.文件使用方法种类。
在这里插入图片描述

二、url路由分发

优点:

  • urls配置解耦,方便管理

原理:

  1. 浏览器访问项目根urls.py文件中的路由规则,通过其中定义的路由规则转发到具体的子urls.py文件中。
  2. 子urls.py文件再调用对应的函数,最终返回一个应用效果。
    在这里插入图片描述

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.访问网页,验证效果。
在这里插入图片描述

三、正则匹配

  • 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("首页")

在这里插入图片描述

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("首页")

在这里插入图片描述

四、压缩归档超链接

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

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>表示转义换行。

在这里插入图片描述

2.验证超链接效果。点击”2020年的文章(70)“会跳转到如下页面。
在这里插入图片描述
3.验证归档效果。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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)
]

在这里插入图片描述

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))

在这里插入图片描述

优化二:使用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文件中定义的访问路径。
在这里插入图片描述
3.当子路由规则文件ivpm/urls.py文件中定义的访问路径更新后,那原来的代码就不能正常访问指定页面了。
在这里插入图片描述
4.可以通过更改代码恢复原来的访问效果。如此可见很是麻烦,所以常常给url定义名称,对其名称进行引用。
在这里插入图片描述

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>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分析】波士顿矩阵

波士顿矩阵是一种用于分析市场定位和企业发展战略的管理工具。由美国波士顿咨询集团&#xff08;Boston Consulting Group&#xff09;于1970年提出&#xff0c;并以该集团命名。 波士顿矩阵主要基于产品生命周期和市场份额两个维度&#xff0c;将企业的产品或业务分为四个象限…

工具--录屏软件

记录下录屏软件 ScreenToGif 官网 &#xff1a;https://www.screentogif.com/downloads 我下载的是 Installer 版本。 录屏&#xff0c;默认输出为 gif 。录制的 gif 清晰&#xff0c;且容量低。需要录gif的话主推&#xff01; 录制后输出为 mp4 的话提示要下载 FFmpeg &a…

基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像

About Alpine&#xff08;简介&#xff09; Alpine Linux 是一款极其轻量级的 Linux 发行版&#xff0c;基于 busybox&#xff0c;多被当做 Docker 镜像的底包&#xff08;基础镜像&#xff09;&#xff0c;在使用容器时或多或少都会接触到此系统&#xff0c;本篇文章我们以该镜…

ubuntu pdf阅读器okular

sudo apt-get install okular安装完毕后&#xff0c;使用如下命令浏览pdf文档 okular xxx.pdf

基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

基于FPGA的FIR低通滤波器实现(附工程源码) 文章目录 基于FPGA的FIR低通滤波器实现(附工程源码)前言一、matlab设计FIR滤波器&#xff0c;生成正弦波1.设计FIR滤波器1.生成正弦波.coe 二、vivado1.fir滤波器IP核2.正弦波生成IP核3.时钟IP核设置4.顶层文件/测试文件代码 三.simul…

数据通信——RIP协议

一&#xff0c;实验背景 你们公司又订购了一批设备&#xff0c;你以为还要为新员工设计静态路由&#xff0c;结果领导说&#xff0c;不是有动态路由吗&#xff1f;用动态路由&#xff0c;就用什么R的那个。“垃圾RIP&#xff0c;用RIP还不如静态&#xff0c;RIP缺点太多&#x…

⛳ Docker 安装 MySQL

&#x1f38d;目录 ⛳ Docker 安装 MySQL&#x1f69c; 一、搜索 mysql , 查看版本&#x1f3a8; 二、拉取mysql镜像&#x1f463; 三、建立容器的挂载文件&#x1f9f0; 四、创建mysql配置文件&#xff0c;my.conf&#x1f3ed; 五、根据镜像产生容器&#x1f381; 六、远程连…

【Windows 常用工具系列 10 -- linux ssh登录脚本输入密码】

文章目录 脚本输入SSH登录密码scp 脚本免密传输 脚本输入SSH登录密码 sshpass 是一个用于运行时非交互式ssh密码提供的工具&#xff0c;它允许你直接在命令行中为ssh命令提供密码。这就意味着你可以在脚本中使用ssh命令&#xff0c;而不需要用户交互地输入密码。 一般来说&am…

wireshark数据包分析

一、实验目的&#xff1a; 掌握wireshark进行基本的协议分析&#xff0c;掌握TCP的三次握手的过程 二、预备知识&#xff1a; TCP/IP协议的三次握手的设计 三、实验过程&#xff1a; 1.关于wireshark这个软件的基本认识&#xff1a; 首先&#xff0c;每次capure的时候&#…

Python Opencv实践 - 直方图显示

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像直方图计算 #cv.calcHist(images, channels, mask, histSize, ranges, hist, accumulate) #images&…

大语言模型微调实践——LoRA 微调细节

1. 引言 近年来人工智能领域不断进步&#xff0c;大语言模型的崛起引领了自然语言处理的革命。这些参数量巨大的预训练模型&#xff0c;凭借其在大规模数据上学习到的丰富语言表示&#xff0c;为我们带来了前所未有的文本理解和生成能力。然而&#xff0c;要使这些通用模型在特…

[保研/考研机试] KY196 复数集合 北京邮电大学复试上机题 C++实现

题目链接&#xff1a; 复数集合_牛客题霸_牛客网 一个复数&#xff08;xiy&#xff09;集合&#xff0c;两种操作作用在该集合上&#xff1a; 1、Pop 表示读出集。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692724009060 描述 一个复数&#xff08;…

腾讯云V265/TXAV1直播场景下的编码优化和应用

// 编者按&#xff1a;随着视频直播不断向着超高清、低延时、高码率的方向发展&#xff0c; Apple Vision的出现又进一步拓展了对3D, 8K 120FPS的视频编码需求&#xff0c;视频的编码优化也变得越来越具有挑战性。LiveVideoStackCon 2023上海站邀请到腾讯云的姜骜杰老师分享腾…

LAMP 架构及Discuz论坛与Wordpress博客搭建

目录 1 LAMP 配置与应用 1.1动态资源与语言 1.2 LAMP 架构的组成 1.2.1 主要功能 2 编译安装Apache http 服务 2.1 环境准备 2.1.1 关闭防火墙及selinux服务 2.1.2 安装依赖环境 2.2 安装软件包 2.2.1 解压软件包 2.2.2 移动apr包 apr-util包到安装目录中&#xff0c;并…

docker第二次作业

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 拉取镜像 docker pull mysql:5.6 docker pull ow ncloud 运行镜像生成容器 [rootharbor ~]# docker run -d --name mydb1 --env MYSQL_ROOT_PASSWORD123456 mysql:5.6 [rootharbor ~]# docker run -d --name…

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离

操作员管理接口设计 HrController RestController RequestMapping("/system/hr") public class HrController {AutowiredHrService hrService;GetMapping("/")public List<Hr> getAllHr(){return hrService.getAllHr();}}HrService public List<…

解决:Appium Inspector刷新页面一直加载转圈

目录 问题&#xff1a;Appium Inspector刷新页面一直加载转圈 解决办法&#xff1a; 1.进入设置页面-电池-后台耗电管理 2.找到下面3个应用&#xff0c;修改为允许后台高耗电 问题&#xff1a;Appium Inspector刷新页面一直加载转圈 1、手机进行操作后&#xff0c;Appium I…

飞腾架构麒麟V10桌面系统Qt应用程序打包

目录 前言1. linuxdeployqt1.1 编译安装 linuxdeployqt1.2 编译安装 patchelf1.3 可选安装 appimagetool 2.设置环境变量3. 打包4.测试5.添加启动图标5.1 设置桌面图标和开始菜单图标5.2设置任务栏图标 6.总结 前言 本文记录了在飞腾架构麒麟V10桌面系统中打包Qt应用程序及部署…

前端需要理解的CSS知识

CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;不是编程语言&#xff0c;而是用来描述 HTML 或 XML&#xff08;包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言&#xff09;文档的表现与展示效果的样式表语言。CSS3是CSS的最新标准&#xff0c;是…

深度学习基础知识-pytorch数据基本操作

1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构&#xff0c;例如 0维&#xff1a;叫标量&#xff0c;代表一个类别&#xff0c;如1.0 1维&#xff1a;代表一个特征向量。如 [1.0&#xff0c;2,7&#xff0c;3.4] 2维&#xff1a;就是矩…