Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 清除request.POST对象并检查其是否有效_Django_Django Forms_Django Class Based Views - Fatal编程技术网

Django 清除request.POST对象并检查其是否有效

Django 清除request.POST对象并检查其是否有效,django,django-forms,django-class-based-views,Django,Django Forms,Django Class Based Views,我有以下HTML格式的表单: <form method="POST"> {% csrf_token %} <button type='submit' name='manager_approve' value='{{ leave.leave_id }}' class='btn btn-success btn-md'>Approve</button> </form> 是否有方法在此请求上运行Is valid()和cleaned\u d

我有以下HTML格式的表单:

<form method="POST">
    {% csrf_token %}
    <button type='submit' name='manager_approve' value='{{ leave.leave_id }}' class='btn btn-success btn-md'>Approve</button>
</form>
是否有方法在此
请求上运行
Is valid()
cleaned\u data()
函数的
form
类。发布['manager\u approve']
而不创建
form
对象?任何帮助都将不胜感激。

不,
是有效的()
已清理的数据是
表单
对象的方法/属性,因此您必须创建表单

但是,如果您有一个模型,您可以创建该模型的一个实例并运行
clean()
,以检查属性是否有效,尽管我认为这与您的用例不匹配,因为您只传递一个id

由于您的用例非常简单,如果没有传递id的
对象离开
对象,您可以通过捕获异常来避免
表单
事件:

try: 
    leave = Leaves.objects.get(id=request.POST['manager_approve'])
except (Leaves.DoesNotExist, ValueError, TypeError):
    # ValueError will be raised if id cannot be cast to int
    # TypeError will be raised if id is of wrong type
    raise Http404
否,
是有效的()
已清理的数据
表单
对象的方法/属性,因此必须创建表单

但是,如果您有一个模型,您可以创建该模型的一个实例并运行
clean()
,以检查属性是否有效,尽管我认为这与您的用例不匹配,因为您只传递一个id

由于您的用例非常简单,如果没有传递id的
对象离开
对象,您可以通过捕获异常来避免
表单
事件:

try: 
    leave = Leaves.objects.get(id=request.POST['manager_approve'])
except (Leaves.DoesNotExist, ValueError, TypeError):
    # ValueError will be raised if id cannot be cast to int
    # TypeError will be raised if id is of wrong type
    raise Http404

因此,在不生成表单对象的情况下执行此操作是安全的?如果将其保存到db中,则不安全,但由于您只是执行
get
并使用ORM,Django负责将其转换为int,因此无需担心SQL注入。我认为创建一个带有
IntegerField
的简单表单并检查它是否有效会更干净。因此,在不创建表单对象的情况下执行此操作是安全的?如果将其保存到db中,这将不安全,但由于您只是执行
get
并使用ORM,Django负责将其转换为int,因此,不必担心SQL注入。我认为创建一个带有
IntegerField
的简单表单并检查其有效性会更简洁。