django 中间件配置 urlconf

本文介绍了如何使用中间件在Django项目中,根据请求路径动态切换不同的URL配置。通过创建student和teacher应用,并设置UrlconfMiddleware,可以避免全局的ROOT_URLCONF限制,灵活定制请求路由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道,可以在 settings模块中设置 根URLConf,但如果某些请求不想将其当作入口,想自定义请求的 URLConf 入口,就可以通过中间件来设置

下面来演示

1. 创建应用并

新建两个应用 student 和 teacher

python manage.py startapp student
python manage.py startapp teacher

两个应用下,分别新建一个 urls.py

student/views.py 编写视图函数

 

from django.http import HttpResponse


def home(request):
    return HttpResponse('student home')


def about(request):
    return HttpResponse('student about')


def user(request):
    return HttpResponse('student user')

teacher/views.py 中编写函数

from django.http import HttpResponse


def home(request):
    return HttpResponse('teacher home')


def about(request):
    return HttpResponse('teacher about')


def user(request):
    return HttpResponse('teacher user')

然后分别编写路由规则

student/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('home/', views.home),
    path('about/', views.home),
    path('user/', views.home),
]

teacher/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('teacher/home/', views.home),
    path('teacher/about/', views.home),
    path('teacher/user/', views.home),
]

2. 编写中间件

首先在 settings.py 中设置 ROOT_URLCONF 为 student

ROOT_URLCONF = 'student.urls'

此时所有的请求,都会匹配 student/urls 中的路由规则

项目根目录下,新建 middleware 目录

其中新建 urlcon.py,文件中新建类 UrlconfMiddleware,代码如下

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
import re


class UrlconfMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if request.path.startswith('/teacher'):
            request.urlconf = 'teacher.urls'
        return

如果请求的 path 中以 teacher 开头,则直接匹配 teacher.urls 不再受根 ROOT_URLCONF 控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴山却话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值