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

Django DRF管理员权限注册接口测试报401错误求助

Django注册登录测试问题解决

1. 注册接口401错误的核心原因

你给注册视图加了IsAdminUser权限限制,但测试时没携带管理员用户的Token请求,所以接口返回401。IsAdminUser要求请求发起者是staff或超级管理员,再加上Token认证的要求,必须在请求头里带上Authorization: Token <管理员token>才能通过权限校验。

2. 测试用例修正步骤

(1)提前创建管理员并配置认证Token

在测试类的setUp方法里生成管理员用户和对应的Token,让测试客户端默认带上认证头:

from django.test import TestCase
from django.contrib.auth import get_user_model
from rest_framework.test import APIClient
from rest_framework.authtoken.models import Token

User = get_user_model()

class AuthTests(TestCase):
    def setUp(self):
        self.client = APIClient()
        # 创建超级管理员用户
        self.admin = User.objects.create_superuser(
            username='admin_test',
            email='admin@test.com',
            password='admin123456'
        )
        # 生成管理员Token
        self.admin_token = Token.objects.create(user=self.admin)
        # 给客户端设置默认认证头
        self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.admin_token.key}')

(2)编写注册接口测试用例

用已配置认证的客户端请求注册接口,再做断言:

def test_normal_user_register(self):
    register_data = {
        'username': 'new_user',
        'email': 'new@test.com',
        'password': 'newpass123'
    }
    response = self.client.post('/api/register/', register_data, format='json')
    # 断言接口返回201创建成功
    self.assertEqual(response.status_code, 201)
    # 断言数据库中已创建该用户
    self.assertTrue(User.objects.filter(username='new_user').exists())

(3)如果注册接口本应开放给普通用户

要是你的注册接口是给普通用户自行注册用的,那别加IsAdminUser权限,直接改成AllowAny:

from rest_framework.permissions import AllowAny

class RegisterView(generics.CreateAPIView):
    serializer_class = RegisterSerializer
    permission_classes = [AllowAny]  # 替换原来的IsAdminUser

3. 断言不匹配问题排查

  • 先打印response.data看接口实际返回的内容,和你断言的预期值做对比
  • 检查RegisterSerializer的fields或to_representation方法,确认返回字段和测试里的断言字段一致
  • 确认请求数据的格式、字段名和序列化器定义完全匹配(比如有没有写错字段名,是否用了format='json')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:53:18