django - Django - 使用 POST 请求仅上传模型中的图片
问题描述
我想用 ajax 上传个人资料图片。
但即使我不使用 ajax 发送图像,它也不起作用。
我的网站上有以下代码:
<form action="{% url 'update_profile_pic' %}" method="post">
{% csrf_token %}
<input name="profilePic" type="file" accept="image/*"/>
</form>
profilePic 应该保存在模型中:
class UserProfile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
primary_key=True,
)
profilePic = ProcessedImageField(
upload_to=generate_random_filename,
processors=[ResizeToFill(150, 150)],
format='JPEG',
options={'quality': 60},
)
...
url.py 有正确的条目:
...
path('update_profile_pic/', views.UpdateProfilePic.as_view(), name='update_profile_pic'),
...
表格是这样的:
class ProfilePicForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('profilePic',)
并且视图也应该是正确的:
class UpdateProfilePic(View):
def post(self, request):
form = ProfilePicForm(self.request.POST, self.request.FILES)
if form.is_valid():
request.user.userprofile.profilePic = form.cleaned_data['profilePic']
request.user.userprofile.save()
return JsonResponse({
image_url : request.user.userprofile.profilePic.url
})
else:
raise Http404(form.errors)
但是当我上传图片时,我总是收到错误“profilePic This field is required.”。此错误来自 raise Http404(form.errors)
,因此表单无效。
当我在谷歌浏览器中查看网络选项卡中的标题时,它向我显示:
csrfmiddlewaretoken:sbyaJ8J7COSdC0OUYr4p8ToaarjFrIniDKLT3Lr36PWeTUlc9MEafr77exYVvkXL
简介图片:fr.cc38d01b0b77.gif
我在这里做错了什么?
解决方案
将表格更改为:
<form action="{% url 'update_profile_pic' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input name="profilePic" type="file" accept="image/*"/>
</form>
你错过了enctype="multipart/form-data"
。
如果您遇到任何有关后端的问题,那么此文档网将为您提供帮助。
推荐阅读
- elasticsearch - 嵌套字段上的 Elasticsearch 桶排序
- python - Pandas - 合并数据框
- javascript - 使数组属性具有索引作为命名空间
- python - Python 在包中导入模块
- c# - 在xml c#中加入2个子节点
- keras - 如何修复“输入张量必须具有 rank 4”的错误?
- sql-server - SQL Server - JOIN ON 条件语句
- python - 处理 Pandas 中的日期时间列:如何修复 pandas 中的“类型错误:需要整数”。异常触发另一个异常
- bitcoin - 解码比特币交易 vin 地址
- php - reCaptcha 显然将人类识别为机器人