Django框架路由Router的使用

路由URL和视图函数的基本使用

  • 在Django中的应用

    python 复制代码
    from django.shortcuts import HttpResponse
    
    
    def hello(request):
        return HttpResponse("Hello World!")
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hello/', hello),
    ]
  • 视图函数一般都不写在urls.py中,需要单独配置在各自的模块里面

路由URL的不同传参方式如何使用

  • 查询字符串方式

    bash 复制代码
    http://localhost:8000/courseQuery/?search=Python
    javascript 复制代码
    from django.contrib import admin
    from django.urls import path
    from course import views
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('courseQuery/', views.course_query)
    ]
    python 复制代码
    from django.shortcuts import HttpResponse
    
    
    def course_query(request):
        # search = request.GET['search']
        search = request.GET.get('search')
        return HttpResponse(f'你查找的是{search}课程')
  • path中携带

    bash 复制代码
    http://localhost:8000/coursePath/Python/
    javascript 复制代码
    from django.contrib import admin
    from django.urls import path
    from videoListPage import views
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('coursePath/<search>/', views.course_path)
    ]
    python 复制代码
    from django.shortcuts import HttpResponse
    
    
    def course_path(request, search):
        return HttpResponse(f'你查找的是{search}课程')

path函数的用法

  • path函数

    sql 复制代码
    path(route, view, kwargs=None, name=None)
    • route:一个字符串,表示URL模式。它可以包含文字字符和转换器(如 int:year)的混合,用于匹配URL的特定部分,并将这些部分作为参数传递给视图。
    • view:当URL与模式匹配时,Django将调用的视图函数或视图类的引用。
    • kwargs(可选):一个字典,包含要传递给视图函数的关键字参数。这些参数在URL匹配时不会从URL中动态提取,而是直接作为静态值传递给视图。
    • name(可选):一个字符串,用于给URL命名。这个名称在Django项目中是唯一的,并且可以在项目的其他地方(如模板和重定向)通过 reverse 函数引用。
  • 转换器的使用

    • route 字符串中,你可以使用尖括号(<>)来定义转换器,这些转换器可以匹配URL的某一部分,并将其作为参数传递给视图。Django提供了多种内置转换器,如:

      • str:匹配任何非空字符串,但不包含斜杠(/)。这是默认的转换器。
      • int:匹配零或任何正整数。
      • slug:匹配由字母、数字、下划线 _ 或连字符 - 组成的字符串(通常用于URL的友好部分)。
      • uuid:匹配格式化的UUID。
    python 复制代码
    from django.urls import path  
    from course import views  
    
    
    urlpatterns = [  
        path('coursePath/<search>/', views.course_path),  # 默认str
        path('courseYear/', views.course_year, {'year': 2026}, name='course_year'),  # 静态
        path('courseYear/<int:year>/', views.course_year, name='course_year'),  # 动态
        path('courseSlug/<slug:search>/', views.course_sluf, name='course_slug'),  # slug
    ]

路由的模块化

  • 路由模块化

    • 将项目中的URL路由分配到不同的应用(app)中,从而实现代码的模块化和可维护性

      复制代码
      python3 manage.py startapp course
  • 课程模块

    • 对于每个Django应用,通常会在其目录下创建一个urls.py文件来定义该应用的路由,这个文件的结构与项目根目录下的urls.py文件类似,都包含一个urlpatterns列表

      ini 复制代码
      from django.urls import path
      from . import views
      
      # 模块名字
      app_name = 'course'
      
      urlpatterns = [
          path('list/', views.course_list, name='course_list'),
          path('detail/', views.course_detail, name='course_detail'),
      ]
  • 路由总入口

    • 项目根目录下的urls.py文件负责将请求分发到各个应用的urls.py文件中。这通过django.urls.include函数实现,该函数允许将某个URL前缀下的所有路由包含进来。

      javascript 复制代码
      from django.contrib import admin
      from django.urls import path, include
      
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('course/', include('course.urls', namespace='course')),
      ]

路由反转

  • 在项目的不同部分(如视图、模板等)中动态地生成URL,而无需硬编码URL字符串,这大大提高了项目的可维护性和可扩展性

  • 通过路由名字得到url

    • 一般是通过url来去访问视图函数,得到对应的页面,现在可以通过反转用名字得到url

      scss 复制代码
      // 基本
      reverse('login')
      
      
      /login
      scss 复制代码
      // 有命名空间
      reverse('course:course_list')
      
      
      /login
      lua 复制代码
      // path携带参数
      reverse('course:course_detail',kwargs={'id': 1})
      
      
      /login/1
      bash 复制代码
      // 查询字符串参数
      reverse('logout') + '?id=1'
      
      
      /logout?id=1
相关推荐
IvanCodes15 分钟前
Python 基础语法(二):字符串与常用操作
python
昭昭日月明21 分钟前
LangChain 生态:从链到代理,开发者需要掌握的三大核心
python·langchain·agent
Csvn28 分钟前
🐍 Day 8:面向对象编程
后端·python
程序员天天困30 分钟前
向量检索不准怎么办:混合检索与 Rerank 重排序召回优化实战
后端·python·ai编程
alphaTao2 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
苏灿烤鱼2 小时前
当 AI Agent 遇见真实科学环境:深度拆解 Scientific Agent Skills,把"聊天机器人"变成"AI 科学家"
python·开源·agent
张文君2 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
lupai13 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
荷蒲14 小时前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人