小编Sco*_*rth的帖子

如果为空,Django forms.FileField(required=True) 正在通过验证

我有一个带有必需 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 django-forms

5
推荐指数
1
解决办法
7372
查看次数

Django:阻止模板使用模型方法

我有一个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()方法?

django

3
推荐指数
1
解决办法
417
查看次数

标签 统计

django ×2

django-forms ×1