You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何限制已登录管理员未经授权访问非权限内管理页面

Django限制未授权用户访问指定路由的解决方案

你可以通过以下3种常用方案实现权限校验,阻止无权限用户直接访问/logistic/路径:

方案1:视图层加权限校验装饰器(最常用)

函数式视图(FBV)场景

使用Django内置的permission_required装饰器,给/logistic/对应的视图函数加权限校验规则:

from django.contrib.auth.decorators import permission_required

# 第一个参数为需要的权限标识,没有权限的用户会被重定向到login_url指定的地址
@permission_required('your_app.access_logistic', login_url='/home/')
def logistic_view(request):
    # 原有视图逻辑
    ...

你需要提前在Django后台给允许访问/logistic/的角色分配access_logistic权限,没有该权限的已登录用户会直接跳转回/home/页面。

类视图(CBV)场景

继承PermissionRequiredMixin类,指定需要的权限即可:

from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic import TemplateView

class LogisticView(PermissionRequiredMixin, TemplateView):
    permission_required = 'your_app.access_logistic'
    login_url = '/home/'
    template_name = 'logistic.html'

方案2:自定义中间件做全局路由拦截

如果有大量需要权限校验的路由,可以自定义中间件统一拦截校验:

  1. 新建middleware.py文件,添加如下代码:
from django.shortcuts import redirect
from django.urls import resolve

class RoutePermissionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        current_path = request.path
        # 匹配需要校验的路由
        if current_path.startswith('/logistic/'):
            # 校验用户是否有对应权限
            if not request.user.has_perm('your_app.access_logistic'):
                return redirect('/home/')
        response = self.get_response(request)
        return response
  1. 在settings.py的MIDDLEWARE列表中注册该中间件即可生效。

方案3:路由层直接加权限校验

如果不想修改视图代码,也可以在urls.py中给对应路由包裹装饰器:

from django.contrib.auth.decorators import permission_required
from .views import logistic_view

urlpatterns = [
    ...
    path('logistic/', permission_required('your_app.access_logistic', login_url='/home/')(logistic_view), name='logistic'),
]

注意:如果你的/logistic/路径只允许超级管理员访问,可以把权限校验逻辑替换为request.user.is_superuser判断即可,不需要额外自定义权限。

内容的提问来源于stack exchange,提问作者Rainysky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:09:06