Django API路由配置报错与404页面问题求助
问题解决方案
1. 解决AttributeError: module 'api.serializers' has no attribute 'UserOutputSerializer'
核心原因
你的api/serializers.py文件中未定义UserOutputSerializer类,同时ViewSet存在两处笔误。
修复步骤
- 补充
UserOutputSerializer定义:打开api/serializers.py,添加用于返回用户数据的序列化器(避免返回敏感字段):
from rest_framework import serializers from django.contrib.auth import get_user_model UserModel = get_user_model() # 保留你已有的UserInputSerializer class UserInputSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) class Meta: model = UserModel fields = ['email', 'first_name', 'last_name', 'password'] # 新增UserOutputSerializer class UserOutputSerializer(serializers.ModelSerializer): class Meta: model = UserModel fields = ['id', 'email', 'first_name', 'last_name', 'is_active']
- 修正ViewSet中的笔误:
- 将
serializers_classes改为serializer_classes(少了一个r,Django REST Framework会读取这个属性来匹配不同动作的序列化器):
# 原错误代码 # serializers_classes = { # "create": serializers.UserInputSerializer # } # 修正后 serializer_classes = { "create": serializers.UserInputSerializer }- 修改
create方法的返回序列化器,避免返回密码字段:
# 原错误代码 # response = serializers.UserInputSerializer(user).data # 修正后 response = serializers.UserOutputSerializer(user).data - 将
2. 解决移除api路由后的根路径404
父路由中未定义根路径(http://127.0.0.1:8000/)的匹配规则,可通过以下方式处理:
- 重定向到api路径:在父
urls.py中添加根路径规则:
from django.shortcuts import redirect from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), # 根路径重定向到api path('', redirect('api/')), path('api/', include('api.urls')) # 把之前移除的api路由加回来 ]
- 或者如果有自定义首页视图,替换为你的视图函数即可。
3. 关于Broken pipe from ('127.0.0.1', 8441)提示
这是浏览器请求中途中断(比如快速刷新页面)导致的非致命警告,解决前面的核心问题后,该提示会自然消失,无需额外处理。
内容的提问来源于stack exchange,提问作者Blessing Tosin AKINYEMI
相关产品推荐
相关产品推荐

