当前位置: 首页 > news >正文

Python web实战之Django URL路由详解

概要

 

技术栈:Python、Django、Web开发、URL路由

Django是一种流行的Web应用程序框架,它采用了与其他主流框架类似的URL路由机制。URL路由是指将传入的URL请求映射到相应的视图函数或处理程序的过程。


 

什么是URL路由?

URL路由是Web开发中非常重要的概念,它将URL映射到特定的视图函数。在Django中,URL路由是由URLconf(URL配置)定义的。URLconf是一个Python模块,它定义了一个URL模式列表,每个URL模式都与一个视图函数相关联。

Django中的URL路由

在Django中,URL路由是通过正则表达式匹配URL模式来实现的。当一个URL请求到达Django应用程序时,Django将尝试将请求的URL与URLconf中的每个URL模式进行匹配。如果找到了匹配的URL模式,则它将调用与之相关联的视图函数。

在Django中定义URL模式的方法非常灵活,你可以使用简单的字符串匹配,也可以使用复杂的正则表达式。来看一个简单的示例:

# myapp/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('about/', views.about, name='about'),path('contact/', views.contact, name='contact'),
]

在上面的示例中,我们定义了三个URL模式:空URL模式(即根URL)将调用views.index函数,URL/about/将调用views.about函数,URL/contact/将调用views.contact函数。

正则表达式路由

除了简单的字符串匹配,Django还支持使用正则表达式来定义URL模式。这使得我们可以更加灵活地匹配不同类型的URL,例如带有参数的URL。

这一个带有参数的URL模式的示例:

# myapp/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('article/<int:article_id>/', views.article_detail, name='article_detail'),
]

上面的代码定义了一个URL模式,它将匹配形如/article/123/的URL。其中123是一个整数类型的参数,我们可以在views.article_detail函数中使用这个参数。

带命名空间的路由

在Django中,命名空间的路由是一种将URL模式组织和分组的方法,它允许你在一个应用程序中定义多个URL模式,同时避免与其他应用程序中的URL模式发生命名冲突。下面是一个使用命名空间的路由的示例:

假设我有一个名为blog的应用程序,我想要定义一些URL模式用于显示博客文章的详细信息和列表。可以在应用程序的urls.py文件中定义这些URL模式,并为这些URL模式指定一个命名空间。下面是blog应用程序的urls.py的代码:

from django.urls import path
from . import viewsapp_name = 'blog'urlpatterns = [path('', views.index, name='index'),path('<int:post_id>/', views.detail, name='detail'),path('category/<slug:category_slug>/', views.category, name='category'),path('tag/<slug:tag_slug>/', views.tag, name='tag'),
]

通过在urlpatterns列表之前定义app_name = 'blog'来指定命名空间。这个命名空间的名称是blog,它将被用作这个应用程序中所有URL模式的前缀。

例如,name='detail'指定了detail作为这个URL模式的名称,那么这个URL模式的完整名称将是blog:detail。我们可以在视图函数中使用这个完整名称来生成URL,例如:

from django.urls import reversedef my_view(request):url = reverse('blog:detail', args=[1])# url will be something like '/blog/1/'# ...

这个示例中演示了如何使用命名空间的路由来组织URL模式,并在视图函数中使用完整的URL名称来生成URL。

Django URL路由的最佳实践

在实际使用Django进行Web开发时,遵循一些最佳实践可以帮助我们更好地利用URL路由。

  • 保持URL模式的简洁明了
    尽可能地使URL模式简单明了。避免使用复杂的正则表达式,除非确实有必要。

  • 保持URL和视图的一一对应
    每个URL应该对应一个明确的视图。避免在一个视图中处理多个URL。

  • 给URL命名
    给每个URL都起一个有意义的名字,这样在代码中引用URL时就不需要记住实际的URL模式。

实战

现在来看一个实际的例子,假设我们要编写一个博客应用程序。我们需要定义一些URL模式来浏览文章、评论和作者信息,可以使用以下URL模式定义:

# myblog/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('posts/', views.post_list, name='post_list'),path('posts/<slug:slug>/', views.post_detail, name='post_detail'),path('authors/<int:pk>/', views.author_detail, name='author_detail'),path('comments/', views.comment_list, name='comment_list'),path('comments/<int:pk>/', views.comment_detail, name='comment_detail'),
]

这里定义了六个URL模式:

  1. 空URL模式将调用views.index函数。

  2. URL/posts/将调用views.post_list函数,用于显示所有文章列表。

  3. URL/posts/slug/将调用views.post_detail函数,用于显示单篇文章的详细信息。

  4. URL/authors/pk/将调用views.author_detail函数,用于显示特定作者的详细信息。

  5. URL/comments/将调用views.comment_list函数,用于显示所有评论列表。

  6. URL/comments/pk/将调用views.comment_detail函数,用于显示特定评论的详细信息。

来看一下如何实现这些视图函数。这里我只展示views.post_listviews.post_detail函数的实现,其他视图函数的实现方法类似。

# myblog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Postdef index(request):return render(request, 'myblog/index.html')def post_list(request):posts = Post.objects.all()context = {'posts': posts}return render(request, 'myblog/post_list.html', context)def post_detail(request, slug):post = get_object_or_404(Post, slug=slug)context = {'post': post}return render(request, 'myblog/post_detail.html', context)

这里用了Django的模型管理器objects来获取所有文章列表,并将其传递给模板渲染。对于views.post_detail函数,使用get_object_or_404方法来获取特定的文章对象,并将其传递给模板渲染。

 

技术总结

今天我们深入探讨了Django的URL路由的应用,包括如何定义URL模式、如何使用正则表达式匹配URL模式、命名空间、最佳实践,并举例简单介绍了如何实现视图函数。

 

如果文章对你有所帮助,欢迎点赞收藏转发,感谢🙏

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

Python web实战之Django URL路由详解

概要 技术栈&#xff1a;Python、Django、Web开发、URL路由 Django是一种流行的Web应用程序框架&#xff0c;它采用了与其他主流框架类似的URL路由机制。URL路由是指将传入的URL请求映射到相应的视图函数或处理程序的过程。 什么是URL路由&#xff1f; URL路由是Web开发中非常…...

10-数据结构-队列(C语言)

队列 目录 目录 队列 一、队列基础知识 二、队列的基本操作 1.顺序存储 ​编辑 &#xff08;1&#xff09;顺序存储 &#xff08;2&#xff09;初始化及队空队满 &#xff08;3&#xff09;入队 &#xff08;4&#xff09;出队 &#xff08;5&#xff09;打印队列 &…...

面试之快速学习C++11 - 右值 移动构造 std::move

C11右值引用 字面意思&#xff0c;以引用传递的方式使用c右值左值和右值&#xff0c;左值是lvalue loactor value 存储在内存中&#xff0c;有明确存储地址的数据&#xff0c; 右值rvalue read value , 指的是那些可以提供数据值的数据&#xff08;不一定可以寻址&#xff0c;…...

vue实现5*5宫格当鼠标滑过选中的正方形背景颜色统一变色

vue实现5*5宫格当鼠标滑过选中的正方形背景颜色统一变色 1、实现的效果 2、完整代码展示 <template><div id"app" mouseleave"handleMouseLeave({row: 0, col: 0 })"><div v-for"rowItem in squareNumber" :key"rowItem…...

2023-08-09 LeetCode每日一题(整数的各位积和之差)

2023-08-09每日一题 一、题目编号 1281. 整数的各位积和之差二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 n&#xff0c;请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例1&#xff1a; 示例2&#xff1a; 提示&#xff1a; 1 …...

EditPlus连接Linux系统远程操作文件

EditPlus是一套功能强大的文本编辑器&#xff01; 1.File ->FTP->FTP Settings&#xff1b; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意&#xff1a;这里的Subdirectory设置的是以后上传文件的默认…...

JVM 垃圾回收

垃圾回收算法 标记-清除算法&#xff08;Mark and Sweep&#xff09; 标记-清除算法分为两个阶段。在标记阶段&#xff0c;垃圾收集器会标记所有活动对象&#xff1b;在清除阶段&#xff0c;垃圾收集器会清除所有未标记的对象。标记-清除算法存在的问题是会产生内存碎片&#…...

编程中的宝藏:二分查找

二分查找 假设你需要在电话簿中找到一个以字母 “K” 开头的名字&#xff08;虽然现在谁还在用电话簿呢&#xff01;&#xff09;。你可以从头开始翻页&#xff0c;直到进入以 “K” 打头的部分。然而&#xff0c;更明智的方法是从中间开始&#xff0c;因为你知道以 “K” 打头…...

计算机网络 数据链路层

...

如何维护自己的电脑

目录 1、关于电脑选择的建议 1.1、价格预算 1.2、明确需求 1.3、电脑配置 1.4、分辨率 1.5、续航能力 1.6、品牌选择 1.7、用户评测 1.8、各个电商平台对比 1.9、最后决策 2、我的选择 3、电脑保养 3.1 外部清洁 3.2 安装软件 3.3 优化操作系统 3.4 维护硬件设…...

智能优化算法——哈里鹰算法(Matlab实现)

目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图 4 matlab代码及结果 4.1 代码 4.2 结果 1 算法简介 哈里斯鹰算法(Harris Hawks Optimization&#xff0c;HHO)&#xff0c;是由Ali As…...

【深度学习】多粒度、多尺度、多源融合和多模态融合的区别

多粒度&#xff08;multiresolution&#xff09;和多尺度&#xff08;multiscale&#xff09; 多粒度&#xff08;multiresolution&#xff09;和多尺度&#xff08;multiscale&#xff09;都是指在不同的空间或时间尺度上对数据或信号进行分析和处理。其中 多尺度&#xff1…...

利用SCCM进行横向移动

01SCCM介绍 SCCM全名为System Center Configuration Manager&#xff0c;从版本1910开始&#xff0c;微软官方将其从Microsoft System Center产品移除&#xff0c;重新命名为Microsoft Endpoint Configuration Manager&#xff08;ConfigMgr&#xff09;&#xff0c;其可帮助 …...

Nginx 负载均衡

Nginx 负载均衡 负载均衡由反向代理来实现的 其中反向代理分为七层代理和四层代理&#xff0c;一般常用的是七层代理&#xff0c;接下来分别介绍一些 NGINX 七层代理 七层是最常用的反向代理方式&#xff0c;只能配置在Nginx配置文件的http模块。 配置方法名称&#xff1a;…...

Java课题笔记~ ServletConfig

概念&#xff1a;代表整个web应用&#xff0c;可以和程序的容器(服务器)来通信 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…...

oracle的异常处理

oracle提供了预定义例外、非预定义例外和自定义例外三种类型。其中&#xff1a; l预定义例外用于处理常见的oracle错误&#xff1b; l非预定义例外用于处理预定义所不能处理的oracle错误&#xff1b; l自定义例外处理与oracle错误无关的其他情况。 Oracle代码编写过程中&am…...

【MySQL】MySQL数据类型

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar类型 五、日期和时间类型六、枚举和集合类型6.1 enum的枚举值和set的位图结构6.2 查询集合find_in_…...

【数据结构与算法】十大经典排序算法-希尔排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…...

docker 常用命令

1. 搜索并下载镜像 docker search bundlefusion # 搜索docker pull jhljx/bundlefusion # 将远程仓库文件下载到本地2. 用镜像创建容器 docker run -it --namebundlefusion colec777/bundlefusion-cu11.4-cudagl:v8 /bin/bash # 创建并运行 exit # 退出终端 sudo docker cont…...

uniapp微信小程序中打开腾讯地图获取用户位置信息

实现的效果 第一步&#xff1a;首先登录微信公众平台 , 需要用到AppID 第二步&#xff1a; 注册登录腾讯位置服务 注册需要手机号和邮箱确认&#xff0c;然后创建应用 创建后点击添加key 添加后会生成key&#xff0c;后面会用到这个key 第三步&#xff1a; 登录微信公众平台&a…...

从零开始撸一个线控转向系统

线控转向&#xff0c;包含设计说明书&#xff0c;carsim模型&#xff0c;MATLAB Simulink模型全套&#xff08;工程项目线上支持&#xff09;"线控转向是一个工程项目&#xff0c;其中包含设计说明书、carsim模型以及MATLAB Simulink模型的全套。这个项目提供在线支持&…...

AMPL社区版下载安装全攻略:从注册到运行第一个优化模型(附迅雷加速技巧)

AMPL社区版实战指南&#xff1a;从零开始构建优化模型 第一次接触AMPL时&#xff0c;很多人会被它强大的数学优化能力吸引&#xff0c;却又在安装配置阶段遇到各种"拦路虎"。作为一款专业的数学建模语言&#xff0c;AMPL确实需要一些技巧才能顺利上手。本文将带你避开…...

从Matlab到FPGA:A律13折线PCM编码的Verilog实现与仿真

1. 从理论到实践&#xff1a;A律13折线PCM编码基础 第一次接触A律13折线PCM编码时&#xff0c;我被那些分段量化的规则绕得头晕。直到把Matlab生成的测试数据用Verilog在FPGA上跑通&#xff0c;才真正理解这个经典算法的精妙之处。**PCM&#xff08;脉冲编码调制&#xff09;**…...

从零构建BJT放大电路:三种组态实战解析与选型指南

1. BJT放大电路基础&#xff1a;从器件特性到放大原理 第一次接触BJT放大电路时&#xff0c;我被那些密密麻麻的电路图和复杂的计算公式搞得头晕眼花。直到亲手搭建了几个实际电路后&#xff0c;才发现理解BJT放大其实没那么难。BJT&#xff08;双极结型晶体管&#xff09;作为…...

USB-Disk-Ejector:重新定义Windows设备安全移除体验

USB-Disk-Ejector&#xff1a;重新定义Windows设备安全移除体验 【免费下载链接】USB-Disk-Ejector A program that allows you to quickly remove drives in Windows. It can eject USB disks, Firewire disks and memory cards. It is a quick, flexible, portable alternati…...

焊接机器人数据采集物联网解决方案

方案背景 在汽车制造领域&#xff0c;焊接机器人作为车身焊接、零部件焊接、汽车总装的自动化生产设备&#xff0c;发挥着至关重要的作用。它们能够精确、高效地完成各种焊接任务&#xff0c;确保焊接质量稳定可靠&#xff0c;焊接强度、焊缝外观等关键指标符合严格的标准要求。…...

Qwen2.5-72B-Instruct-GPTQ-Int4部署教程:vLLM Token统计+成本核算接口

Qwen2.5-72B-Instruct-GPTQ-Int4部署教程&#xff1a;vLLM Token统计成本核算接口 1. 模型简介 Qwen2.5-72B-Instruct-GPTQ-Int4是Qwen大语言模型系列的最新版本&#xff0c;具有72.7亿参数规模&#xff0c;采用GPTQ 4-bit量化技术。这个指令调优模型在多个方面实现了显著提升…...

【模拟IC】从指标到参数:二级运放GBW与相位裕度的设计实战

1. 理解GBW与相位裕度的工程意义 第一次接触运放设计时&#xff0c;看到GBW100MHz、PM>60这样的指标要求&#xff0c;就像拿到一张没有说明书的电路图。作为从业十年的模拟IC工程师&#xff0c;我至今记得当初面对这些抽象参数时的困惑。**增益带宽积(GBW)和相位裕度(PM)**本…...

M2LOrder WebUI实战:Gradio Blocks高级定制+多Tab情感分析工作台

M2LOrder WebUI实战&#xff1a;Gradio Blocks高级定制多Tab情感分析工作台 1. 引言&#xff1a;从简单界面到专业工作台 如果你用过一些AI工具的Web界面&#xff0c;可能会发现很多界面长得都差不多&#xff1a;左边一个输入框&#xff0c;右边一个输出框&#xff0c;中间一…...

如何彻底修复Windows更新故障:Reset Windows Update Tool完整使用指南

如何彻底修复Windows更新故障&#xff1a;Reset Windows Update Tool完整使用指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...