django - 清理 request.POST 对象并检查它是否有效
问题描述
我在 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')
有没有办法在不创建对象的情况下运行类的功能is_valid()
和cleaned_data()
功能?form
request.POST['manager_approve']
form
解决方案
不,is_valid()
并且cleaned_data
是Form
对象的方法/属性,因此您必须创建一个表单。
但是,如果您有一个模型,您可以创建该模型的一个实例并运行clean()
以检查属性是否有效,尽管我认为这与您的用例不匹配,因为您只传递了一个 id。
由于您的用例非常简单,Form
如果没有Leaves
传递 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
推荐阅读
- android - Firestore 中的布尔值通过复选框切换。需要点击 2 次才能更改值?
- php - 尝试使用 phpmailer 和 g-suite 发送电子邮件
- javascript - 网上搜索js库参考
- jestjs - 我可以让 jest 串行运行 Javascript 测试吗?
- css - 如何扩展 FontAwesome 图标
- java - Hackerrank (Java) MAXIMUM LENGTH SUBSTRING - 超时错误
- android - 如何在日历视图中禁用未来日期
- class - 处理对象中计算属性的正确方法是什么?
- fortran - 为什么在 Fortran 上进行黎曼和近似时,中点规则比辛普森规则更准确
- python - 尝试从 selenium 使用 webdriver 时出错