【问题标题】:"POST /user/create/ HTTP/1.1" 500 82190“POST /user/create/HTTP/1.1” 500 82190
【发布时间】:2021-04-09 14:57:09
【问题描述】:

我在 django rest 中设置身份验证时遇到问题。每次我尝试使用对此 url http://127.0.0.1:8000/user/create/ 的发布请求创建用户时,我都会收到此错误:AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned从看来,却收到了<class 'NoneType'> [09/Apr/2021 14:41:43]“POST /user/create/HTTP/1.1”500 82190。我在这里尝试了可能的解决方案,但没有成功。

views.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) 

serializers.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

urls.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,您没有返回任何内容。

标签: python django authentication


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2013-09-08
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多