我是django的新手,我有以下问题。
我的模型中有一些用户"用户"它有一个电子邮件和一个用户名字段。我在forms.py中创建了一个LoginFrom,它只接受一个电子邮件地址并检查它是否存在于User数据库中。然后我想返回我的views.py并检索该模型并使用它。
很简单,但我不能这样做
return email_get
在我的forms.py中,因为它说用户已经存在。我可以回到views.py的唯一方法是更改我收到的表单电子邮件。
类似的东西,
email_got="found@gmail.com"
return email_got
那么,如何通过保留原始表单电子邮件返回forms.py. Ps,我只是想手动检查用户是否存在于数据库中。
这是我的forms.py
from django import forms
from .models import User
class LoginForm(forms.ModelForm):
class Meta:
model=User
fields= ['email']
def clean_email(self):
email_got = self.cleaned_data.get('email')
if User.objects.filter(email=email_got).exists():
raise forms.ValidationError("Your email already exist")
return email_got
我的views.py
from django.conf import settings
from django.shortcuts import render
from django.core.mail import send_mail #for sending mail
from .forms import SignUpForm, LoginForm
from .models import User
def login(request):
username = None
form=LoginForm(request.POST or None)
if form.is_valid():
new_user = form.save()
username = getattr(new_user, 'username')
context = {
"form": form,
"username":username,
}
return render(request,"login.html",context)
非常感谢你的帮助!!
答案 0 :(得分:0)
好的,你的isUser
"验证器"根本没有运行。我可以看到你在email
字段上进行自定义验证,但为了让django知道你想要调用isUser
函数,你必须遵循clean_field_name(self)
的命名约定/要求。但是,由于您只是在进行登录检查,因此您应该检查login(request)
内是否存在该电子邮件。
所以你的forms.py:
from django import forms
from .models import User
class LoginForm(forms.ModelForm):
class Meta:
model=User
fields= ['email']
您的views.py应如下所示:
from django.conf import settings
from django.shortcuts import render
from django.core.mail import send_mail #for sending mail
from .forms import SignUpForm, LoginForm
from .models import User
def login(request):
username = None
form=LoginForm(request.POST or None)
if form.is_valid(): # This part will just do the typical Django validation (no custom validation added now).
existing_user = User.objects.filter(email=form.cleaned_data.get('email')).first()
if existing_user: # The email provided exists in db.
username = existing_user.username
else: # email does not exist so do redirect
return redirect('name_of_your_sign_up_view')
context = {
"form": form,
"username":username,
}
return render(request,"login.html",context)