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

Django仅允许管理员访问页面的自定义代码运行异常如何解决?

Django 实现仅超级管理员可访问页面的修复方案

现有代码的常见问题

  • 缺少render模块导入,运行时会直接抛出导入错误
  • 未做登录状态校验,匿名用户访问时request.user.is_superuser会直接返回False,无法自动触发登录流程,不符合常规业务逻辑
  • 跳转逻辑如果使用外站链接不符合项目内的跳转规范,建议替换为项目内部路由

方案1:直接修复现有函数视图代码

from django.shortcuts import redirect, render
from django.contrib.auth.decorators import login_required

# 登录校验装饰器:未登录用户会自动跳转到项目默认登录页
@login_required
def index(request):
    if not request.user.is_superuser:
        # 替换为项目内无权限提示页/首页的路由名即可
        return redirect('home')
    return render(request, 'scan_debug/index.html')

方案2:用内置装饰器简化权限校验逻辑

from django.shortcuts import render
from django.contrib.auth.decorators import user_passes_test

# 自定义权限校验函数
def check_superuser(user):
    return user.is_superuser

# 自动完成登录+权限校验,校验不通过默认跳登录页
@user_passes_test(check_superuser, login_url='/no-permission/')
def index(request):
    return render(request, 'scan_debug/index.html')

可通过login_url参数自定义无权限时的跳转地址,指向项目内的自定义提示页即可。


方案3:类视图实现方案

如果使用Django类视图开发,可直接继承权限校验Mixin实现:

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

class IndexView(UserPassesTestMixin, TemplateView):
    template_name = 'scan_debug/index.html'
    # 自定义无权限跳转地址
    login_url = '/no-permission/'
    
    def test_func(self):
        return self.request.user.is_superuser

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:03