我已经尝试了 2 天的时间来寻找解决方案...无法弄清楚为什么一旦我更改了任何用户详细信息登录对我不起作用。
正常流程对我来说很好用:用户注册、登录和退出都没有问题。但我认为有个人资料更改选项会很好,用户可以在其中更改用户名、密码或电子邮件。我确实实现了这一点,但是在用户更改任何内容(甚至是电子邮件)后,登录表单不接受他。
这是我的views.py:
from django.contrib.auth.forms import UserCreationForm, UserChangeForm, PasswordChangeForm
from .forms import ContactForm, CreateUserForm, EditUserForm
class ProfileView(UpdateView):
template_name = 'boat_app/edit_profile.html'
form_class = UserChangeForm
success_url = reverse_lazy('anchored')
def get_object(self):
return self.request.user
class LoginView(TemplateView):
template_name = 'boat_app/login.html'
success_url = reverse_lazy('category_home')
def post(self, request):
print(request)
user = authenticate(request, username=request.POST.get('username'), password=request.POST.get('password'))
if user is not None:
print('user not none')
login(request, user)
return HttpResponseRedirect(reverse('anchored'))
else:
print('user none')
messages.info(request, 'Username OR password is incorrect')
return HttpResponseRedirect(reverse('login'))
和 forms.py
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class EditUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'email')
更改用户后,我在管理界面中看到此更改,因此它确实有效。但是我看不出系统看不到这种关系的原因。有什么方法可以调试那里到底发生了什么?
更新
我尝试通过后台管理更改用户 - 一切正常。我还尝试使用 {{ form.as_p }} 而不是我的 ProfileView 自定义模板 - 这也有效!很明显,我的 html 模板有一些可疑的东西,它破坏了更新视图,并且不允许收集数据以供将来登录。
这是我的“boat_app/edit_profile.html”
{% block body_block %}
<div class="row align-items-center vh-100">
<div class="col-lg-4 d-none d-md-block">
</div>
<div class="col-lg-4 d-flex align-items-center">
<div class="container p-3 text-center bg-light">
<div class="my-3">
<h1>Change your details</h1>
<p>Did something change?</p>
</div>
<form method="post">
{% csrf_token %}
<div class="form-group row px-3">
<label for="{{ form.username.id_for_label }}">{{form.username.label}}</label>
{% render_field form.username class="form-control" %}
</div>
<div class="form-group row px-3">
{{ form.email.errors }}
<label for="{{ form.email.id_for_label }}">{{form.email.label}}</label>
{% render_field form.email class="form-control" %}
</div>
<div class="form-group row px-3">
{{ form.password.errors }}
<label for="{{ form.date_joined.id_for_label }}">{{form.date_joined.label}}</label>
{% render_field form.date_joined class="form-control" %}
</div>
<div class="form-group row text-left px-3">
<p>If you need to change password, click <a href="{% url 'password' %}">here</a>.</p>
</div>
<button class="btn btn-primary" type="submit">Submit</button>
</form>
</div>
</div>
<div class="col-lg-4 d-none d-md-block">
</div>
</div>
{% endblock %}