Django如何验证POST参数

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等存在不同的威胁,因此无法对其进行全部过滤.

  • 在django中,有多种保护XSS或SQL注入的方法。模板内置了XSS的正确方法。对于SQL注入,如果您不使用原始查询或“额外”,ORM将完成此工作 (2认同)

小智 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()函数.希望这可以帮助!