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

Django报错:'function'对象无get_extra_actions属性路由问题求解

错误原因

DRF 提供的 SimpleRouter、DefaultRouter 路由注册器仅支持注册 DRF 原生的 ViewSet 类,你当前的用法存在两处问题:

  • 你传给 router.register() 的参数是 LoginView.as_view() 的返回值,这是一个标准的函数视图,没有 ViewSet 必须具备的 get_extra_actions 属性,因此直接触发属性不存在的报错
  • Django 自带的 LoginView 是普通 Django 类视图,并非 DRF ViewSet 的子类,本身就不兼容 DRF 路由注册器的注册逻辑
  • 补充说明:即使你使用的是 DRF 自带的 ViewSet,注册时也不需要加 .as_view(),直接传递 ViewSet 类本身即可,加了 .as_view() 依然会触发同类报错
解决方案

方案1:直接注册普通视图到路由列表(推荐,适配你当前使用 Django 自带 LoginView 的需求)

删掉 DRF 路由注册器相关的 LoginView 注册代码,直接把 LoginView 路由添加到 urlpatterns 即可,修改后的 urls.py 代码如下:

from django.contrib import admin
from django.urls import path
from django.contrib.auth.views import LoginView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', LoginView.as_view(), name='login'),
]

方案2:如果确实需要用 DRF 路由注册器管理登录接口

你需要将登录逻辑封装为 DRF ViewSet 子类再注册,示例实现如下:

  1. 首先在 main/views.py 中定义登录 ViewSet
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth import authenticate, login

class LoginViewSet(viewsets.ViewSet):
    def create(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return Response({"msg": "登录成功"}, status=status.HTTP_200_OK)
        return Response({"msg": "用户名或密码错误"}, status=status.HTTP_400_BAD_REQUEST)
  1. 之后在 urls.py 中注册该 ViewSet
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from main.views import LoginViewSet

router = routers.SimpleRouter()
# 注意这里直接传 ViewSet 类,不要加 .as_view()
router.register(r'login', LoginViewSet, basename='login')

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(router.urls)),
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:06