首页 > 解决方案 > 处理 post 请求的 Django Web 应用程序

问题描述

我是 Django 新手,对处理对我的服务器的发布请求感到困惑。我想接受这种 json 格式的发布请求:{“username”:”john@doe.com”,”password”:”pass@word1”}并回复这些 json 格式的响应:

{“status”:”success”,”message”:”user_authed”}如果找到用户和密码组合 如果找不到 {“status”:”failure”,”message”:”user_not_found”}用户和密码组合

这是我的views.py 代码

from django.shortcuts import render

from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from . models import users
from . serializers import userSerializer


class userList(APIView):

def get(self, request):
    user = users.objects.all()
    serializer = userSerializer(user, many=True)
    return Response(serializer.data)

def post(self, request):
    serializer = userSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我想知道如何格式化 post 函数以接受上述格式的请求,以及如何自定义回复是否经过身份验证。任何帮助将不胜感激

标签: pythondjangodjango-rest-frameworkdjango-views

解决方案


您要完成的工作称为身份验证。请提前阅读https://www.django-rest-framework.org/api-guide/authentication/ 。

然后根据您所学的内容编辑您的问题。

希望早日收到你的消息!

#serializers.py
from rest_framework import serializers
UserRequestSerializer(serializers.Serializer)
    username = CharField(required=True, max_length=128)
    password = CharField(required=True, max_length=128)

#views.py
from .serializers import *

UserCheckView(APIView):

    def post(request, *args, **kwargs):
        serializer = UserRequestSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        try:
            user = User.objects.get(username=serializer.validated_data['username'])
            if user.check_password(serializer.validated_data['password']:
                return Response(data={“status”:”success”,”message”:”user_authed”},status=status.HTTP_200_OK)
            return Response(data={“status”:”failure”,”message”:”password_did_not_match”}, status=status.HTTP_400_BAD_REQUEST)
        except User.DoesNotExist:
            return Response(data={“status”:”failure”,”message”:”user_not_found”}, status=status.HTTP_404_NOT_FOUND)

推荐阅读