可选的图片输入字段让我离开会话

时间:2017-11-28 16:21:21

标签: django

这个问题让我困惑了好几个小时了。我正在设计一个 更新个人资料页面,如果用户愿意,用户可以更新照片。

问题在于,当我将图像输入字段留空并编辑其他字段并点击提交时,没有任何更改,我被踢出会话,另一方面,当我选择要上传的图像并点击提交时,一切都是更新和功能运行我设计它。

以下是相关代码:

class User(models.Model):
    photo  = models.CharField(max_length=100, null=False, blank=True)

这是一个Charfield'因为我只存储对数据库中图像的引用。

HTML:

<input type="file" name='photo' class="form-control">

查看:

if request.method == 'POST':

     photo = request.FILES['photo']
     if photo:
         fs = FileSystemStorage()
         filename = fs.save(photo.name, photo)
         uploaded_file_url = fs.url(filename)
         if uploaded_file_url[-4:] not in ALLOWED_EXTENSIONS:
               error = 'Invalid File Type'
               errors.append(error)

     print(uploaded_file_url)

您可以忽略print语句。我在这个函数中传播了一堆,所以我可以看到函数在每个阶段的工作原理。由于这个原因,我能够确定当文件输入字段留空时,不再处理其他代码并退出程序。但显然该领域是可选的。我也检查了缩进。让我的头脑。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明,我没有初始化uploaded_file_url变量而打破了函数执行。我尝试将request.FILES['photo']更改为request.FILES.get('photo'),但行为略有不同,但行为上的差异根本不明显。当我使用.get('photo')时,为了缩短这一点,它在浏览器中引发了一个错误,这一直暗示着我的错误。初始化变量是我必须做的全部。

我观察到的主要区别是request.FILES['xxx']如果对代码有些不满意就不会引发错误,它会在没有单词的情况下退出,而request.get('xxx')会引发错误。