python - Django Rest 框架请求验证
问题描述
有没有办法在不编写样板代码的情况下验证随请求传递的参数?现在我有这样的东西:
project_id = kwargs['project_id']
try:
project_obj = Project.objects.get(id=project_id)
except Project.DoesNotExist:
return Response(
{'message': 'Requested project does not exist'},
status=status.HTTP_404_NOT_FOUND
)
except ValueError:
return Response(
{'message': 'Project id must be a number'},
status=status.HTTP_400_BAD_REQUEST
)
我读过关于 Serializers' Validation 的文章,但我不确定它是否正确。如果不处理这些异常,Django 只会返回 500,这不是我真正想要的行为。
解决方案
您将最终编写一些样板文件,但您可以通过指定相关字段类型来清理您所拥有的内容,例如使用 anIntegerField
可以避免您检查类型,并get_object_or_404
在这些情况下为您节省 try/catch。
但是,您真的想为这项工作使用真正正确的字段,并且很可能是Relation 字段PrimaryKeyRelatedField
。
推荐阅读
- vue.js - Vue.js 动态输入值绑定
- laravel - Laravel:为 json 字段/列定义规则或模式
- javascript - 无法在字符串上创建属性“键”
- java - 在 Java 中查找样条函数的导数
- dart - 为什么 cupertino_icons 中的图标很少?
- linux - 日期:无效日期'2018-10-21 +1天'
- android - 如何在 Android Studio 中创建新的 Android AAR
- amazon-web-services - 从 Beanstalk/EC2 Web 应用程序读取/写入 S3 图像
- css - 非静态页脚导航栏出现在移动设备屏幕底部上方
- ios - SpriteKit 中的 SKVideoNode 问题,模拟器仅显示灰屏