我目前正在构建基本的登录功能。这样做时,我遇到了打ic。
我正在使用的方法在模板中显示密码字段。我相信我理解为什么会这样做,但是不确定如何防止它出现。
我有以下看法
@method_decorator(login_required, name='dispatch')
class UserUpdateView(UpdateView):
form_class = CustomUserChangeForm
#model = User
#fields = ('first_name', 'last_name', 'email', 'profile_picture')
template_name = 'user_accounts/profile.html'
success_url = reverse_lazy('user_accounts:user_profile')
def get_object(self):
return self.request.user
相关的Django表单是
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = ('first_name', 'last_name', 'email', 'profile_picture')
profile.html
是
{% extends 'base.html' %}
{% block title %}My account{% endblock %}
{% block breadcrumb %}
<li class="breadcrumb-item active">My account</li>
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-7 col-md-8 col-sm-10">
<form method="post" novalidate>
{% csrf_token %}
{% include 'includes/form.html' %}
<button type="submit" class="btn btn-success">Save changes</button>
</form>
</div>
</div>
{% endblock %}
最后,form.html
是
{% load widget_tweaks form_tags %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% if form.non_field_errors %}
<div class="alert alert-danger" role="alert">
{% for error in form.non_field_errors %}
<p{% if forloop.last %} class="mb-0"{% endif %}>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
{% for field in form %}
<div class="form-group">
{{ field.label_tag }}
{% render_field field class=field|input_class %}
{% for error in field.errors %}
<div class="invalid-feedback">
{{ error }}
</div>
{% endfor %}
{% if field.help_text %}
<small class="form-text text-muted">
{{ field.help_text|safe}}
</small>
{% endif %}
</div>
{% endfor %}
我的问题有两个方面。第一部分是如何防止显示密码字段。就是说,这种方法太复杂了吗?还是很体面,只需要调整一下。
第二部分与该模型的profile_picture
字段有关。选择文件并使用按钮更新用户信息时,看不到任何上传的图像。我不确定为什么。我怀疑这可能与第一个问题有关。