python - 更新个人资料图片
问题描述
所以我正在开发一个小 django 应用程序,用户可以在其中查看和修改那里的个人资料,但我不知道如何在个人资料图片下提供一个按钮,允许用户选择一个新的,当他选择它时将他重定向到与新个人资料图片相同的页面,任何帮助或想法都会很有用,tnks !
这是我尝试过的:
表格.py
class picture_form(forms.ModelForm):
class Meta:
model=Profile
fields=('image',)
视图.py
def profile(request):
if request.method == 'POST':
form = picture_form(request.POST, request.FILES)
if form.is_valid():
profile = Profile.objects.get(user=request.user)
profile.image = form.cleaned_data['image']
profile.save()
return redirect(reverse('profile'))
else:
for usr in User.objects.all():
if request.user.get_full_name() == usr.get_full_name():
prf = Profile.objects.filter(user=usr)
form = picture_form()
return render(request, 'store/profile.html', {'profile': prf, 'form': form})
模板
{% if prf.image %}
<div class="profile-img">
<img src="{{ prf.image.url }}" id="prf_img" alt=""/>
</div>
{% else %}
<div class="profile-img">
<img src="{% static 'img/empty-profile-picture.png' %}" id="prf_img" alt=""/>
</div>
{% endif %}
<!--<a href="{% url 'upload_picture' %}"> <div class="file btn btn-lg " >
Change Photo
<input type="file" name="file"/>
</div></a> -->
<form method="post" action="{% url 'profile' %}" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" class="btn btn-outline-success" value="upload">
</form>
</div>
解决方案
Django 有一个很棒的通用编辑视图,叫做UpdateView。你可以这样做:
模型.py
class Profile(models.Model):
image = models.ImageField()
视图.py
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic.edit import UpdateView
@method_decorator(login_required, name='dispatch')
class UpdateProfileView(UpdateView):
model = Profile
fields = ['image']
template_name_suffix = '_update_form'
success_url = ''
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
profile_update_form.html
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update">
</form>
网址.py
from . import views
path('<int:pk>/update/', views.UpdateProfileView.as_view(), name='profile-update')
推荐阅读
- c# - Azure 服务的 C# 授权筛选器?
- javascript - 条件远程:真取决于验证
- html - 防止在悬停时抽动按钮
- python - 来自后端python服务器语法错误的mysql查询,表名上有反引号
- python - Selenium 错误:元素不再附加到 DOM
- svg - SVG:从不同于用于计算路径的原点开始的贝塞尔曲线
- image - 如何通过调用 matplotlib imshow 两次为同一斧头覆盖热图?
- google-sheets - 比较字符串与
- node.js - 从 Nodejs 中的 API 简单获取但 UnhandledPromiseRejectionWarning: nestedFunction is not a Function
- c++ - 我应该增加还是减少反向迭代器?