python - “POST /user/create/HTTP/1.1” 500 82190
问题描述
我在 django rest 中设置身份验证时遇到问题。每次我尝试使用对此 url http://127.0.0.1:8000/user/create/的发布请求创建用户时,我都会收到此错误:AssertionError: Expected a Response
, HttpResponse
or HttpStreamingResponse
to be returned from the view, but received a <class 'NoneType'>
[ 2021 年 4 月 9 日 14:41:43]“POST /user/create/HTTP/1.1”500 82190。我在这里尝试了可能的解决方案,但没有成功。
视图.py
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework.views import APIView
from rest_framework import status, permissions
from rest_framework.response import Response
from .serializers import TokenObtainPairSerializer
from rest_framework.generics import CreateAPIView
from .serializers import CustomUserSerializer, MyTokenObtainPairSerializer
class CustomUserCreate(APIView):
permission_classes = (permissions.AllowAny,)
def post(self, request, format = 'json'):
serializer = CustomUserSerializer(data= request.data)
if serializer.is_valid():
user = serializer.save()
if user:
json = serializer.data
return Response(status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
序列化程序.py
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework import serializers
from .models import CustomUser
class CustomUserSerializer(serializers.ModelSerializer):
email = serializers.EmailField(required=True)
username = serializers.CharField()
password = serializers.CharField(min_length = 8, write_only= True)
class Meta:
model = CustomUser
fields = ('email', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
网址.py
from django.urls import path
from rest_framework_simplejwt import views as jwt_views
from .views import ObtainTokenPairWithColorView, CustomUserCreate, HelloWorld
urlpatterns = [
path('user/create/', CustomUserCreate.as_view(), name="create_user"),
]
解决方案
返回时,您的视图不会返回任何serializer.is_valid()
内容False
。在这种情况下,您还需要做出响应。这可能是由于缩进不良:
class CustomUserCreate(APIView):
permission_classes = (permissions.AllowAny,)
def post(self, request, format = 'json'):
serializer = CustomUserSerializer(data= request.data)
if serializer.is_valid():
user = serializer.save()
if user:
json = serializer.data
return Response(status=status.HTTP_201_CREATED)
# outside the body of the if clause
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
推荐阅读
- android - 如何将 ffmpeg gl-transition 项目集成到我现有的项目中
- artifactory - JFrog Artifactory 无法启动 artdb.db_properties' 不存在
- c++ - 是否可以为 QScatterSeries 中的每个点设置单独的标记大小?
- css - CSS 媒体查询未按预期工作
- laravel - 在 laravel 中用雄辩的联合和急切加载
- antlr4 - Antlr4 getParent 当前上下文
- java - 在 C/C++ 中使用布尔数组参数调用 JAVA 的布尔数组方法
- python - 如何在python中隐藏导入行?
- reactjs - Reactjs Leaflet 自定义控制按钮
- python - 如何合并两个在不同数据流上训练的 CNN?