Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在POST中返回DRF表单数据_Django_Forms_Django Rest Framework - Fatal编程技术网

Django 如何在POST中返回DRF表单数据

Django 如何在POST中返回DRF表单数据,django,forms,django-rest-framework,Django,Forms,Django Rest Framework,因此,我有一个基于类的view views/users.py,其中POST应该将表单中的数据发送到序列化程序以进行验证,如果可以,则创建用户并返回数据,但由于某种原因,它返回404错误请求 以下是观点: class UserSignUpAPIView(APIView): """ User sign up API view. """ permission_classes = [AllowAny] renderer_

因此,我有一个基于类的view views/users.py,其中POST应该将表单中的数据发送到序列化程序以进行验证,如果可以,则创建用户并返回数据,但由于某种原因,它返回404错误请求

以下是观点:

class UserSignUpAPIView(APIView):
    """ User sign up API view. """
    permission_classes = [AllowAny]
    renderer_classes = [TemplateHTMLRenderer]
    template_name = 'users/signup.html'

    def get(self, request):
        serializer = UserSignUpSerializer
        return Response({'serializer': serializer,})
    
    def post(self, request, *args, **kwargs):
        """ Handle HTTP POST request. """
        serializer = UserSignUpSerializer(data=request.data)
        
        if serializer.is_valid(raise_exception=True):
            user = serializer.save()
            data = UserModelSerializer(user).data
            return Response(data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
get函数工作正常,它返回模板,但当我提交表单时,它返回404错误请求

我的序列化程序是以下序列化程序/users.py

class UserSignUpSerializer(serializers.Serializer):
    """ User sign up serializer. 

        Handle sign up data validation and user creation.
    """
    email = serializers.EmailField(
        validators=[UniqueValidator(queryset=User.objects.all())]
    )

    username = serializers.CharField(
        min_length=4,
        max_length=20,
        validators=[UniqueValidator(queryset=User.objects.all())]
    )

    password = serializers.CharField(
        min_length=8,
        max_length=64
    )

    password_confirmation = serializers.CharField(
        min_length=8,
        max_length=64
    )

    first_name = serializers.CharField(
        min_length=2,
        max_length=30
    )

    last_name = serializers.CharField(
        min_length=2,
        max_length=30
    )

    birth_date = serializers.DateField()

    def validate(self, data):
        """ Check that passwords match.
            Check that age of the user is over 16.
        """
        print('validate')
        # birth date validation
        dob = data['birth_date']
        print(dob)
        today = date.today()
        if (dob.year + 16, dob.month, dob.day) > (today.year, today.month, today.day):
            raise serializers.ValidationError('Must be at least 16 years old to register.')
        print('dob validated')
        # password validation
        passwd = data['password']
        passwd_conf = data['password_confirmation']

        if passwd != passwd_conf:
            raise serializers.ValidationError("Passwords don't match.")
        password_validation.validate_password(passwd)

        print('password validated')
        return data

    def create(self, data):
        """ Handle user creation. """
        data.pop('password_confirmation')
        user = User.objects.create_user(**data)
        'user created'
        return user
模板如下所示

{% extends 'users/base.html' %}
{% load rest_framework %}

{% block head_content %}
    <title> Sign up </title>
{% endblock %}

{% block container %}
    <h3>Sign up here! </h3>
    <form action="{% url 'users:signup' %}" method="POST">
    {% csrf_token %}

    {% render_form serializer %}

    <button class="btn btn-primary btn-block mt-5" type="submit"> Register </button>

    </form>
    <p class="mt-4"> Have an account already? <a href="{% url "users:login" %}">Log in here. </a></p>
{% endblock %}


我像这样编辑了post函数,它起了作用:

def post(self, request, *args, **kwargs):
        """ Handle HTTP POST request. """
        serializer = UserSignUpSerializer(data=request.data)

        if not serializer.is_valid(raise_exception=True):
            return Response({'serializer': serializer,})

        serializer.save()

        return redirect('users:login')
我试图模拟文档中的内容

def post(self, request, *args, **kwargs):
        """ Handle HTTP POST request. """
        serializer = UserSignUpSerializer(data=request.data)

        if not serializer.is_valid(raise_exception=True):
            return Response({'serializer': serializer,})

        serializer.save()

        return redirect('users:login')