validation - 如何验证 DjangoRestFramework 中的数据?这是从 Views.py 传递的
问题描述
我很难在 DjangoRestFramework 中获取和验证数据。
视图.py
from rest_framework.views import APIView
from rest_framework.response import Response
import json
from Bigflow.Master.Model import mMasters
import Bigflow
mCore = Bigflow.mCore
from rest_framework import serializers
from Bigflow.API.serializers import loginSerializer
from rest_framework.parsers import JSONParser
from rest_framework.serializers import ModelSerializer
class login(APIView):
def post(self, request):
#jsondata = json.loads(request.body.decode('utf-
8')).get('ls_json')
jsondata = json.loads(request.body.decode('utf-8'))
user_name = jsondata.get('username')
user_password = jsondata.get('password')
serializer = loginSerializer(data=jsondata)
if serializer.is_valid(raise_exception=True):
new_data = serializer.data
out_message = mCore.get_login(user_name, user_password)
return Response(out_message)
序列化器.py*
from rest_framework import serializers
from Bigflow.Master.Model import mMasters
from rest_framework import exceptions
class loginSerializer(serializers.Serializer):
user_name = serializers.CharField(required=False)
user_password = serializers.CharField(required=False)
class Meta:
model = mMasters
fields = [
"user_name",
"user_password"
]
def validate(self, data):
user_name = data.get('username')
raise exceptions.ValidationError('TEST DONE')
我正在获取数据到 Loginserializer 类。我不知道如何处理这些数据并对其进行验证。
例如,user_name 不为 null,user_password 长度大于 8 。
解决方案
序列化器:
我会同时做这两个user_name
和user_password
必需的,因为它们应该被传递才能登录。您可以在下面看到密码验证示例:
class loginSerializer(serializers.Serializer):
user_name = serializers.CharField(required=True)
user_password = serializers.CharField(required=True)
class Meta:
model = mMasters
fields = [
"user_name",
"user_password"
]
def validate_user_password(self, value):
"""
Validates `user_password`.
"""
if len(value)<8:
raise serializers.ValidationError("Passwords must be at least 8 characters long")
return value
查看:
class login(APIView):
def post(self, request):
serializer = loginSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
data = serializer.data
qs = User.objects.filter(
username=data.user_name
)
if qs.count() == 1:
user_obj = qs.first()
if user_obj.check_password(data.user_password):
## RETURN YOUR RESPONSE WITH AUTH TOKEN
return Response({"detail": "Invalid credentials"}, status=401)
推荐阅读
- javascript - 错误:“[Vue 警告]:属性或方法“posts”未在实例上定义,但在渲染期间被引用。” 也适用于“书籍”
- swift - 当用户解锁手表时,复杂功能数据是最新的吗?
- python - Numpy中第二维的点积?
- python - hvplot.box 中的不同颜色
- reactjs - 我想在单击提交按钮一次并删除以前的映射项后控制台记录值,但它不起作用
- c# - 是否可以阻止我的 log4net 控制台日志出现在 nunit 控制台运行程序测试输出中
- css - 我怎样才能给这个blob svg一个滚动变形效果?
- php - eval() 和 file_get_contents() .. 不同的结果
- javascript - ng-Include 在 ng-include 中,都绑定到不同的控制器
- javascript - 通过 JavaScript 控制单个元素的多个关键帧动画