首页 > 解决方案 > “POST /user/create/HTTP/1.1” 500 82190

问题描述

我在 django rest 中设置身份验证时遇到问题。每次我尝试使用对此 url http://127.0.0.1:8000/user/create/的发布请求创建用户时,我都会收到此错误:AssertionError: Expected a Response, HttpResponseor HttpStreamingResponseto 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"),
]

标签: pythondjangoauthentication

解决方案


返回时,您的视图不会返回任何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)

推荐阅读