Joh*_*hv1 5 python django validation parameters post
我通过POST请求将一些参数传递给django.如何验证参数是否为整数,字符串以及内部没有代码注入等不安全的东西?我可以使用django功能吗?
例如:
if request.method == 'POST':
print request.POST.get('user_comment')
Run Code Online (Sandbox Code Playgroud)
如何检查POST参数是否包含我系统的非危险字符串?就像是
request.POST.get('user_comment').is_valid()
Run Code Online (Sandbox Code Playgroud)
谢谢.
Gwy*_*idD 12
要检查POST数据是否安全,具有正确的类型等,您可以使用django中的表单.例如,如果您需要3个必需参数,一个字符串和两个整数,则可以创建表单:
from django import forms
class MyValidationForm(forms.Form):
first = forms.CharField()
second = forms.IntegerField()
third = forms.IntegerField()
Run Code Online (Sandbox Code Playgroud)
并在视图中使用它:
if request.method == 'POST':
form = MyValidationForm(request.POST, request.FILES)
if not form.is_valid():
# print some error here
else:
# do whatever you like
Run Code Online (Sandbox Code Playgroud)
对于过滤如果字符串不包含危险的东西,则没有通用的解决方案.数据库,XSS等存在不同的威胁,因此无法对其进行全部过滤.
小智 7
如果您使用的是Django REST Framework,那么您可以在视图中执行以下操作.
from rest_framework import status
from rest_framework.views import APIView
class MyView(APIView):
def post(self , request):
serializer = MySerializer(data = request.data)
if serializer.is_valid():
serializer.save()
return Response({"status" : "Success"} , status = status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)
如果您没有使用DRF,请查看serializers.py以了解如何is_valid()实现.基本上,它调用django.db.models.fields的run_validators()函数.希望这可以帮助!