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

【Django篇】--动手实现路由模块化与路由反转

一、路由模块化

        在一个Django项目中,由于功能类别不同,因此需要将不同功能进行模块化设计。在Django项目中模块化设计则需要将不同模块封装为对应的app模块,每一个模块中涉及到的路由则也需要进行模块化设计,才能更好的让整个项目的耦合性更低。

  • 创建app的适用条件
    • 功能模块化:为了将项目功能清晰划分,提高可维护性。
    • 重用代码:为了在多个项目中重用特定功能模块。
    • 大型项目拆分:为了提高大型项目的可管理性和可扩展性。
    • 团队协作:为了在团队开发中减少代码冲突,提高工作效率。
    • 插件或第三方集成:为了更好地管理和隔离第三方服务或插件。
    • 测试和开发分离:为了在开发过程中便于管理和维护测试代码。
    • API开发:为了集中和清晰地处理API请求。
    • 遵循DRY原则:为了避免代码重复,提高代码复用性。
    • 项目结构清晰:为了提高代码的可读性和逻辑性。
    • 遵循Django的最佳实践:为了符合Django项目推荐的模块化开发方式

         在Django项目中创建app的命令:

# 将movie替换为自己的app名称
python manage.py startapp movie

       在movie包中的view视图文件中创建视图,如下:

from django.shortcuts import render, HttpResponse# Create your views here.def movie_list(request):return HttpResponse("电影列表")def movie_index(request, movie_id):return HttpResponse(f"你的电影ID为:{movie_id}")

        在movie包中创建urls文件,并在其中将视图文件映射到url上,如下:

"""
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :urls
@Time :2024/12/30 15:49
@Motto:一直努力,一直奋进,保持平常心"""
from django.urls import path
from . import viewsurlpatterns = [path('movie_list', views.movie_list, name='movie_list'),path('movie_index/<int:movie_id>', views.movie_index, name='movie_index')
]

        最后在Django项目的urls文件中将创建的movie中的urls文件进行关联:

"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index), # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]

        项目演示:

 二、路由反转

 2.1、概念

        在Django项目中,路由反转是指通过视图函数的名称或路径对象来动态生成URL的过程。这是Django URL dispatcher的一个特性,允许你在模板、视图或其他Python代码中引用视图,而不是硬编码URL。

  • 进行路由反转的优势:
    • 减少硬编码:避免在代码中硬编码URL,使得URL的修改更加灵活,只需更改URL配置而不需要修改引用该URL的代码。

    • 提高代码可维护性:当URL发生变化时,只需更改一处即可,无需搜索整个项目中的硬编码URL,降低了维护成本。

    • 增强代码的可读性:使用视图名称或路径对象引用URL,使得代码更加清晰易懂,尤其是对于大型项目来说,可以快速定位到对应的视图函数。

    • 支持国际化:在进行国际化时,URL可能会根据语言的不同而变化,路由反转可以动态生成适应不同语言环境的URL。

    • 简化测试:在编写测试时,可以使用路由反转来构造测试URL,而不需要关心具体的URL路径是什么。

    • 支持命名空间:在Django中,可以使用命名空间来组织URL,路由反转可以帮助正确地解析带有命名空间的URL。

    • 动态URL生成:在某些情况下,URL可能依赖于动态数据,如对象的ID或slug,路由反转可以方便地生成这些动态URL。

2.2、实现方式

        测试代码:

"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
from django.urls import reverse"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
from django.urls import reverse
# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):print(reverse("index"))return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index, name='index'),  # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id, name='book_id'),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path, name='book_path'),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):print(reverse("index"))return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index, name='index'),  # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id, name='book_id'),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path, name='book_path'),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]

        运行项目并访问http://127.0.0.1:8000/得到:

        通过传递参数:

"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
from django.urls import reverse
# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):print(reverse("book_path",kwargs={"book_id":1}))# print(reverse("index"))return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index, name='index'),  # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id, name='book_id'),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path, name='book_path'),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]

         运行项目并访问http://127.0.0.1:8000/得到:

        查询字符串传参:

"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
from django.urls import reverse
# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):print(reverse("book_id")+"?id=1")# print(reverse("book_path",kwargs={"book_id":1}))# print(reverse("index"))return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index, name='index'),  # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id, name='book_id'),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path, name='book_path'),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]

        运行项目并访问http://127.0.0.1:8000/得到:

        命名空间传参:

"""
URL configuration for DjangoProjectCode project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.1/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from django.shortcuts import HttpResponse
from book import views
from django.urls import reverse
# 默认的地址为:http://127.0.0.1:8000/# 如果我想要访问默认地址下的其他内容,可以通过定义视图并将视图进行映射
def index(request):print(reverse("movie:movie_list"))# print(reverse("book_id")+"?id=1")# print(reverse("book_path",kwargs={"book_id":1}))# print(reverse("index"))return HttpResponse("这是默认页面")def my_page(request):return HttpResponse("我的第一个Django项目,我们一定会顺利毕业滴!")urlpatterns = [path("admin/", admin.site.urls),path("", index, name='index'),  # 双引号中为空内容,表示为默认地址path("mypage", my_page),  # 自定义urlpath("book", views.book_detail_query_id, name='book_id'),# 在book_id前面添加指定参数类型,如果在浏览器中输入了非整型,会报404错误,并且在视图函数中,book_id就是一个整型,否则是字符串类型path("book/<int:book_id>", views.book_detail_path, name='book_path'),# 将movie app中的urls关联到项目urls中path("movie/", include("movie.urls"))]

        运行项目并访问http://127.0.0.1:8000/得到:

http://www.lryc.cn/news/512223.html

相关文章:

  • 多元统计分析练习题3
  • windows remote desktop service 远程桌面RDS授权激活
  • 6-pandas数据读取
  • 【Logback详解】
  • Flume的概念和原理
  • 初始nginx
  • vulnhub靶场 Empire LupinOne
  • 6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
  • 使用Lodash工具库的orderby和sortby进行排序的区别
  • CSS面试题|[2024-12-24]
  • flask-admin 在modelview 视图中重写on_model_change 与after_model_change
  • Excel粘贴复制不完整的原因以及解决方法
  • 【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)
  • Cocos Creator 3.8.5 正式发布,更小更快更多平台!
  • Python中构建终端应用界面利器——Blessed模块
  • Android 15 状态栏闹钟图标不显示问题修复
  • 数据采集背后的效率革命:如何优化你的爬虫性能
  • 【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
  • 《计算机组成及汇编语言原理》阅读笔记:p128-p132
  • 使用 OpenCV 在图像中添加文字
  • 实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4
  • Linux系统:内核态与用户态的深层思考
  • # 光速上手 - JPA 原生 sql DTO 投影
  • ASP.NET Web应用程序出现Maximum request length exceeded报错
  • HTML——16.相对路径
  • windows 默认的消息ID有那些---我与大模型对话
  • CSV vs 数据库:爬虫数据存储的最佳选择是什么
  • 编译原理学习笔记——CH7-Runtime Environments运行时环境
  • 机器学习DAY7: 特征工程和特征选择(数据预处理)(完)
  • vue3动态加载组件