清理 request.POST 个对象并检查它是否有效
Clean request.POST object and checking if it is valid
我在 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>
我正在按以下方式处理此请求:
class ProcessLeaveRequest(TemplateView):
template_name = 'LMSAdmin/process_leave_request.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name, {'leave_requests': GetLeaves.process_results(request)})
def post(self, request):
if 'manager_approve' in request.POST:
leave = Leaves.objects.get(id=request.POST['manager_approve'])
return redirect('process_leave_request')
有没有办法在 request.POST['manager_approve']
上实现 form
class 的 运行 is_valid()
和 cleaned_data()
功能而不创建 form
对象?
不,is_valid()
和 cleaned_data
是 Form
对象的 methods/properties,因此您必须创建一个表单。
但是,如果您有一个模型,您可以创建该模型的一个实例,然后 运行 clean()
来检查属性是否有效,尽管我认为这不符合您的使用case 因为你只传递了一个 id。
由于您的用例非常简单,如果没有传递 id 的 Leaves
对象,您可以通过捕获异常来避免 Form
事情:
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
我在 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>
我正在按以下方式处理此请求:
class ProcessLeaveRequest(TemplateView):
template_name = 'LMSAdmin/process_leave_request.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name, {'leave_requests': GetLeaves.process_results(request)})
def post(self, request):
if 'manager_approve' in request.POST:
leave = Leaves.objects.get(id=request.POST['manager_approve'])
return redirect('process_leave_request')
有没有办法在 request.POST['manager_approve']
上实现 form
class 的 运行 is_valid()
和 cleaned_data()
功能而不创建 form
对象?
不,is_valid()
和 cleaned_data
是 Form
对象的 methods/properties,因此您必须创建一个表单。
但是,如果您有一个模型,您可以创建该模型的一个实例,然后 运行 clean()
来检查属性是否有效,尽管我认为这不符合您的使用case 因为你只传递了一个 id。
由于您的用例非常简单,如果没有传递 id 的 Leaves
对象,您可以通过捕获异常来避免 Form
事情:
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