python - 处理 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 函数以接受上述格式的请求,以及如何自定义回复是否经过身份验证。任何帮助将不胜感激
解决方案
您要完成的工作称为身份验证。请提前阅读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)
推荐阅读
- sql-server - MSSQL 事务复制不同版本
- amazon-web-services - 当 AWS Auto Scaling 组向外扩展哪个 ec2 实例被视为主实例时
- android - Glide 无法解析方法 'into(android.widget.TextView)'
- javascript - npx react-native init 错误在 appdata 文件夹中不包含 package.json 文件
- html - 媒体查询不响应
- python - Python:GridSearchCV 执行时间过长
- swift - “Roll”类型的表达式模式与“Requests.RawValue”(又名“Roll”)类型的值不匹配
- c++ - 获取最后执行的 return 语句的行
- python - Django中的表单方法后的HttpRequest?
- jquery-selectbox - 如何获取 html 选择框选项 selecteditem 实际值