我有一个自定义的用户模型
class User(AbstractBaseUser):
email = _models.EmailField (max_length=252, unique=True)
username = _models.CharField (max_length=252, blank=True, null=True)
staff = _models.BooleanField (default=False)
superuser = _models.BooleanField (default=False)
active = _models.BooleanField (default=True)
USERNAME_FIELD = 'email'
这是表格
class UserLoginForm(_f.ModelForm):
password = _f.CharField(widget=_f.PasswordInput())
class Meta:
model = User
fields = ['email', 'password']
这是视图
from django.contrib.auth import authenticate, login
from django.views.generic import FormView,
from .forms import UserRegistrationForm, UserLoginForm
class UserLoginView(FormView):
form_class = UserLoginForm
success_url = '/'
template_name = 'accounts/user_login.html'
def form_valid(self, form):
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
user = authenticate(request=self.request, email=email, password=password)
if user:
login(self.request, user)
return super(UserLoginView, self).form_valid(form)
return super(UserLoginView, self).form_invalid(form)
应用的urls.py
from django.urls import path
from .views import UserLoginView, UserRegistrationView
app_name = 'accounts'
urlpatterns = [
path('login/', UserLoginView.as_view(), name='login'),
path('register/', UserRegistrationView.as_view(), name='register'),
]
项目的urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('applications.accounts.urls', namespace='namespace_accounts')),
]
此视图user_login.html
UserLoginView
{% extends 'accounts/login_base.html' %}
{% load staticfiles %}
{% block content %}
<form method="POST">
<div class="form-group">
{% csrf_token %}
{{ form.as_p }}
</div>
<button type="submit" class="btn btn-dark">Login</button>
</form>
{% endblock %}
以新用户身份注册后,用户将被重定向到登录页面,凭据凭据,登录名一直显示&#34;用户已使用此电子邮件。&#34;
注意:模型email
上的User
字段是唯一的。
很明显,登录页面试图以某种方式进行另一次注册,而且这个&#34;某种程度上&#34;这让我很困惑。
我可以做些什么来解决这个问题&#34;使用此电子邮件的用户已经存在。&#34;?
答案 0 :(得分:0)
我怀疑,UserLoginView
试图再次注册,即再次创建新用户,而不是进行身份验证并进行登录。发生这种情况是因为我的表格继承自forms.ModelForm
;从forms.ModelForm
更改为forms.Form
解决了问题。
归功于这个问题的Answer!