我有一个带有必需 FileField 的 Django 表单(不是 ModelForm)。根据FileField 文档,FileField 的验证应该验证非空文件数据已绑定到表单,但我没有看到这种行为。相反,我可以在没有文件的情况下提交表单并且表单通过验证。预期的行为是验证失败。
当在表单中指定文件时,事情会按预期工作。
我的表格看起来像这样:
class BucketUploadForm(forms.Form):
file = forms.FileField(required=True) # required=True is the default, but I'm being explicit
def clean(self):
upload_to = '/some/path'
upload_to += self.cleaned_data['file'].name # this is raising a KeyError
Run Code Online (Sandbox Code Playgroud)
我的观点是这样的:
def bucket_upload(request):
if request.method == 'POST':
form = BucketUploadForm(request.POST, request.FILES)
if form.is_valid(): # this is raising the aforementioned KeyError when no file is submitted
do_stuff()
return HttpResponseRedirect(some_url)
else:
form = BucketUploadForm(initial=request.GET)
return render_to_response('handin/bucket_upload.html', {'form': form}, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我的模板看起来像这样:
<form action="" …Run Code Online (Sandbox Code Playgroud) 我有一个Django应用程序,看起来像这样:
class Server(models.Model):
hostname = models.CharField(max_length=100)
# this field stores encrypted credentials
admin_credentials = models.TextField()
def get_admin_credentials(self):
return decrypt(self.admin_credentials)
Run Code Online (Sandbox Code Playgroud)
由于Django的模板语言允许模板调用其上下文变量的方法(不需要参数),因此模板通过包含以下代码来泄漏这些凭证似乎太容易了:
{{ server.get_admin_credentials }}
Run Code Online (Sandbox Code Playgroud)
如何防止模板直接使用该get_admin_credentials()方法?