django的路由分发
前言:
在前面我们已经学习了基础的Django了,今天我们将继续学习,我们今天学习的是路由分发:
路由分发是Web框架中的一个核心概念,它指的是将不同的URL请求映射到对应的处理函数(视图)的过程。在Django这样的Web框架中,路由分发是通过URL配置(通常在urls.py文件中定义)来实现的。
1.什么是路由分发?
-
定义URL模式:在Django中,路由分发通常通过定义一系列的URL模式来实现。这些模式指定了URL的结构,以及当这些URL被访问时应该调用哪个视图函数。
-
映射到视图:每个URL模式都与一个视图函数或类关联。当一个请求的URL与某个模式匹配时,Django就会调用与之关联的视图函数来处理请求。
-
分发请求:路由分发的目的是将用户的请求分发到正确的视图函数。这个过程是动态的,根据请求的URL来决定。
-
组织URL:路由分发有助于组织项目的URL结构,使其清晰和易于维护。通过将URL映射到视图,开发者可以构建出逻辑清晰的Web应用程序。
2.Django中的路由分发
在Django中,路由分发是通过以下步骤实现的:
-
根URL配置:在项目的根目录下,通常会有一个
urls.py文件,它包含了项目的主路由配置。 -
包含应用路由:在根
urls.py文件中,可以使用include()函数将请求分发到不同的应用。这允许每个应用有自己的路由配置,使得项目结构更加模块化。 -
应用URL配置:每个应用可以有自己的
urls.py文件,用于定义该应用的路由规则。 -
正则表达式和路径表达式:Django允许使用正则表达式(通过
re_path()函数)或路径表达式(通过path()函数)来定义URL模式。 -
命名路由:路由可以被命名,这样可以在模板和视图中方便地引用它们。
-
重定向:路由分发也可以用来实现URL的重定向。
2.1应用级别的路由配置
每个Django应用下都可以有一个urls.py文件,这个文件用于定义该应用的路由配置。
# UrlApp/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('index/', views.index),
]
在这个例子中,UrlApp是一个应用的名称,views是该应用中定义视图的模块。urlpatterns是一个列表,包含了该应用的所有路由规则。每个路由规则使用path()函数定义,它接受一个URL模式和一个视图函数。
2.2项目的路由分发
在项目的根目录urls.py文件中,你可以将请求分发到不同的应用。这是通过使用include()函数实现的。
# 项目的根目录 urls.py
from django.urls import path, includeurlpatterns = [path('urlapp/', include('UrlApp.urls')),path('urlapp2/', include('UrlApp2.urls')),
]
这里的include()函数用于包含另一个URL配置模块。当Django处理请求时,它会查看根urls.py中的urlpatterns列表。如果找到匹配的路由,它会将请求进一步分发到指定的应用路由配置中。
-
path('urlapp/', include('UrlApp.urls')):这行代码定义了一个路由规则,当用户访问/urlapp/时,Django会查找UrlApp应用下的urls.py文件,并使用该文件中的urlpatterns来进一步处理请求。 -
path('urlapp2/', include('UrlApp2.urls')):同样,这行代码为UrlApp2应用定义了一个路由前缀/urlapp2/。所有以这个前缀开头的URL都会交给UrlApp2应用的urls.py文件来处理。
2.3使用正则表达式匹配路由
Django的re_path()函数允许使用正则表达式来匹配URL模式。
# 使用正则表达式匹配路由
from django.urls import re_path
from django.http import HttpResponse
from myapp import viewsurlpatterns = [re_path(r'^[A-Za-z]+/$', views.re_view),
]def re_view(request):return HttpResponse('这个视图的路由是英文字母响应')
在这个例子中,正则表达式r'^[A-Za-z]+/$'匹配任何以一个或多个英文字母开头和结尾的URL。匹配到的字母部分会传递给re_view视图函数。这个是正则表达式的通用表示。
2.4 URL参数传递
Django的path()函数允许在URL中定义参数,并将其传递给视图函数。
# URL参数传递
from django.urls import pathurlpatterns = [path('demo/<urldata>/', views.get_url_data),
]def get_url_data(request, urldata):return HttpResponse(f'从 URL 中获取到的参数为:{urldata}')
在这个例子中,<urldata>是一个动态路径参数,它会被替换为实际的URL部分,并作为参数传递给get_url_data视图函数。
2.5 在URL映射中携带附加数据
path()或re_path()函数可以接受一个字典作为第三个参数,这个字典会被作为附加数据传递给视图函数。
urlpatterns = [path('extra/', views.extra, {'age': 28}),
]def extra(request, age):return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')
在这个例子中,字典{'age': 28}会被传递给extra视图函数。
2.6 默认参数
视图函数可以接受默认参数值,如果URL中没有提供相应的参数,将使用默认值。
urlpatterns = [path('default/', views.default_data),path('default/<data>/', views.default_data),
]def default_data(request, data=369):return HttpResponse(f'从 URL 中获取到的参数为:{data}')
在这个例子中,如果URL中没有提供data参数,视图函数将使用默认值369。
2.7.路由转换器
Django提供了一些内置的路由转换器,用于将URL参数转换为特定的数据类型。
urlpatterns = [path('int/<int:data>/', views.int_view),path('str/<str:data>/', views.str_view),path('path/<path:data>/', views.path_view),path('slug/<slug:data>/', views.slug_view),path('uuid/<uuid:data>/', views.uuid_view),
]def int_view(request, data):return HttpResponse(f'使用 int 转换器,接收到的数据为:{data}')def str_view(request, data):return HttpResponse(f'使用 str 转换器,接收到的数据为:{data}')def path_view(request, data):return HttpResponse(f'使用 path 转换器,接收到的数据为:{data}')def slug_view(request, data):return HttpResponse(f'使用 slug 转换器,接收到的数据为:{data}')def uuid_view(request, data):return HttpResponse(f'使用 uuid 转换器,接收到的数据为:{data}')
int:匹配正整数,并将参数转换为整数类型。str:匹配非空字符串。path:匹配任意非空字符串,包括斜杠。slug:匹配字母、数字、下划线和横线。uuid:匹配通用唯一标识符(UUID)。
3.反向解析路由:
反向解析路由是Django中一个非常有用的功能,它允许你通过视图函数名(即URL的模式名称)来动态构建URL,而不是直接硬编码URL字符串。这种方式提高了代码的可维护性和灵活性,尤其是当你需要更改URL结构时,你只需要修改urls.py文件中的路径,而不需要在整个项目中搜索和替换硬编码的URL。
在Django中,反向解析路由是一种动态获取URL的方式,它允许你在模板和视图中使用人可读的名称来引用URL,而不是硬编码的路径。这种方式提高了代码的可维护性和可读性。
3.1在HTML模板中反向解析路由
在模板中,可以使用{% url 'URL的模式名称' 参数 %}来反向解析路由。
<body>反向解析路由<br><a href="{% url 'num' %}">点击开奖</a><br><a href="{% url 'age' 28 %}">不要点击</a><br>
</body>
这里,'num'和'age'是URL的模式名称,它们对应于视图的URL配置。
3.2在视图中反向解析路由
在视图中,可以使用reverse('URL的模式名称')来获取URL。
from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirectdef text(request):return HttpResponse(f'视图解析路由:{reverse("num")}')def redirect_reverse(request):return redirect(reverse("num"))def text_data(request, data):return HttpResponse(f'视图解析路由:{reverse("age", args=[data])}')
reverse函数接受URL的模式名称和一个可选的参数列表或关键字参数字典,返回对应的URL。
3.3URL的模式名称
在urls.py中,通过给path函数的name参数赋值,可以为URL定义一个模式名称。
from django.urls import path
from . import viewsurlpatterns = [path('index/', views.index),path('html/', views.html_view),path('number/', views.number, name='num'),path('age/<data>/', views.data_view, name='age'),
]
3.4.URL的应用名称空间
在大型项目中,不同的应用可能有不同的URL配置,为了避免URL模式名称的冲突,Django允许为每个应用定义一个名称空间。
3.5定义应用名称空间
在应用的urls.py文件中,可以定义一个app_name属性来设置应用的名称空间。
app_name = 'urlapp2'
3.6在模板中使用应用名称空间
在模板中反向解析属于特定应用名称空间的URL时,需要指定应用名称空间和URL的模式名称。
<body><a href="{% url 'urlapp2:num' %}">点击开奖</a><br><a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>
在这里,'urlapp2'是应用的名称空间,'num'和'age'是URL的模式名称。
3.7在视图中使用应用名称空间
在视图中,也需要使用带有应用名称空间的URL模式名称来反向解析URL。
def text(request):return HttpResponse(f'视图解析路由:{reverse("urlapp2:num")}')def redirect_reverse(request):return redirect(reverse("urlapp2:num"))def text_data(request, data):return HttpResponse(f'视图解析路由:{reverse("urlapp2:age", args=[data])}')
反向解析路由是Django中一个强大的功能,它允许你动态地构建URL,而不是硬编码。通过定义URL的模式名称和应用名称空间,你可以避免URL的冲突,并使你的代码更加清晰和易于维护。
结语:
今天关于Django的路由分发的部分就先分享到这里了,关于这个路由分发在整个的Django框架里面是非常重要的,因为是通过路由分发可以提高你的代码的灵活性和可维护性,不过由于小编的水平有限,这些关于路由分发的内容难免会有所遗漏,希望大家可以多多支持一下,也欢迎大佬的斧正,小编都会虚心接受的。今天的分享就先到这里了,大家下次再见!

相关文章:
django的路由分发
前言: 在前面我们已经学习了基础的Django了,今天我们将继续学习,我们今天学习的是路由分发: 路由分发是Web框架中的一个核心概念,它指的是将不同的URL请求映射到对应的处理函数(视图)的过程。…...
《贪吃蛇小游戏 1.0》源码
好久不见! 终于搞好了简易版贪吃蛇小游戏(C语言版),邀请你来玩一下~ 目录 Snake.h Snake.c test.c Snake.h #include<stdio.h> #include<windows.h> #include<stdbool.h> #include<stdlib.h> #inclu…...
初入网络学习第一篇
引言 不磨磨唧唧,跟着学就好了,这个是我个人整理的学习内容梳理,学完百分百有收获。 1、使用的网络平台:eNSP 下载方法以及内容参考这篇文章 华为 eNSP 模拟器安装教程(内含下载地址)_ensp下载-CSDN博客https://b…...
(项目管理系列课程)项目规划阶段:项目范围管理-收集需求
在项目管理中,“规划过程组”是指一系列旨在定义和细化项目目标、规划如何达到这些目标并管理项目工作的过程。在这个过程中,“收集需求”是一个至关重要的活动,它涉及到识别和记录项目干系人的需求,以确保项目最终能够满足干系人…...
SQl注入文件上传及sqli-labs第七关less-7
Sql注入文件上传 1、sql知识基础 secure_file_priv 参数 secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。 secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能导出导入。 secure_fil…...
想成为月薪过万的软件测试工程师?快看过来!
软件测试人员的工作主要是检测软件系统中的存在的BUG,但并不是毫无逻辑的盲目抓瞎。学会运用测试思维去完成测试工作,会使你的工作事半功倍。 01 软件测试的前提假设 测试人员进行软件测试的基本假设是“有罪推断”。即:认为被测程序一定是…...
找生网站方案———未来之窗行业应用跨平台架构
1)网站设计方面的考虑 主色调采用于公司深蓝色颜色,网页整体色彩明快、大气、简洁,每个细节均经过精心处 理,网页浏览快速,导航明确清晰。 网页设计要充分考虑网页的整体感觉,每个页面的图片与网站色调的过…...
全网都在找的Python生成器竟然在这里!简单几步,让你的代码更简洁、更高效!
博客主页:长风清留扬-CSDN博客系列专栏:Python基础专栏每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法感谢大家点赞ὄ…...
插入排序,希尔排序,和归并排序
每一本数据结构和算法的教科书中,都不厌其烦的介绍了排序算法。不厌其烦的介绍10余种不同的排序。那么实际编程中用得到那么多排序算法吗?当然用不到。那么为什么全世界的教科书都这么写呢?显然是醉翁之意不在酒。 数组,是每个编…...
Prompt 模版解析:诗人角色的创意引导与实践
Prompt 模版解析:诗人角色的创意引导与实践 Prompt 模版作为一种结构化工具,旨在为特定角色——本例中的“诗人”——提供明确的指导和框架。这一模版详尽地描绘了诗人的职责、擅长的诗歌形式以及创作规则,使其能在自动化系统中更加精确地执…...
zookeeper选举kafka集群的controller
zookeeper选举kafka集群的controller目录 文章目录 zookeeper选举kafka集群的controller目录前言一、实操体验controller的选举二、模拟controller选举四、删除controller节点 前言 kafka集群的controller是kafka集群中一个有特殊作用的broker,负责整个kafka集群的…...
吉如一线段树:区间最值和历史最值
区间最值和历史最值 问题一 给定一个长度为 n n n 的数组 a a a , 实现以下三种操作 : 0 l r x : 将 a r r [ l ∼ r ] arr[l\sim r] arr[l∼r] 范围的每个数 v v v , 更新为 min ( v , x ) \min (v, x) min(v,x) 1 l r : 查询 max i l r a r r i \max_{il}^r ar…...
数据库常见的安全特性有哪些
数据库的安全特性主要包括以下几个方面,以确保数据的机密性、完整性和可用性: 1. 身份验证(Authentication) 数据库系统会通过身份验证来确定用户的身份,常见的方式有用户名/密码验证、基于证书的验证、多因素验证&a…...
Debezium日常分享系列之:Debezium 3.0.0.Final发布
Debezium日常分享系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标 MariaDB连接器的更改版本 11.4.3 支持 MongoDB连接器的更改MongoDB sink connector MySQL连接器的改变MySQL 9MySQL…...
MVCC(多版本并发控制)
目录 1.MVCC的工作原理2.MVCC的优点3.例子 MVCC(多版本并发控制)是一种用于数据库管理系统中实现并发控制的技术。它允许多个事务同时对数据库进行读写操作,而不会相互干扰,从而提高数据库系统的性能和可用性。MVCC通过为每个事务…...
低代码可视化-uniapp响应式数据data-代码生成器
在uniapp框架中,data 是一个核心的概念,它代表了组件或uniapp实例中的响应式数据。这些数据是组件状态的基础,uniapp会根据这些数据的变化来更新DOM,从而保持视图与数据的同步。 data 的特点 响应式:uniapp使用一种称…...
10.7学习
1.安全认证 ●Session 认证中最常用的一种方式,也是最简单的。存在多节点session丢失的情况,可通过nginx粘性Cookie和Redis集中式Session存储解决 ●HTTP Basic Authentication 服务端针对请求头中base64加密的Authorization 和用户名和密码进行校验。…...
基础算法之前缀和--Java实现(下)--LeetCode题解:-和为 K 的子数组 - 和可被 K 整除的子数组 -连续数组-矩阵区域和
这里是Themberfue 和为 K 的子数组 题目解析 返回子数组中所有元素的和等于给定k的个数。 算法讲解 这题好像是用滑动窗口解决,但其实不能,因为 nums 中的元素可能存在负数,就不能保证其单调性的性质。 用前缀和求也不易想到,…...
序列化与反序列化基础及反序列化漏洞(附案例)
参考文章: [web安全原理]PHP反序列化漏洞 - 笑花大王 - 博客园 (cnblogs.com) 一、概念 为了能有效的存储数据而不丢失数据的类型和内容,经常需要通过序列化对数据进行处理,将数据进行序列化后,会生成一个字符串,字符…...
Khronos:动态环境下时空度量语义SLAM的统一方法
Khronos: A Unified Approach for Spatio-Temporal Metric-Semantic SLAM in Dynamic Environments 原文 项目 引言: 人类居住环境通常是高度动态的,人、机器人和其他实体不断移动、互动和改变场景。对于机器人在这种情况下的操作,仅仅建立一…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...
window 显示驱动开发-如何查询视频处理功能(三)
D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
