Python 如何加上「;按用户名称或电子邮件地址搜索”;django中的字段忘记了密码
这是django默认忘记密码表单。如何修改以添加“按用户名搜索”功能。例如“用户名/电子邮件”。有人能帮我吗。我是django的noob。刚开始学习Python 如何加上「;按用户名称或电子邮件地址搜索”;django中的字段忘记了密码,python,django,django-forms,web-frameworks,Python,Django,Django Forms,Web Frameworks,这是django默认忘记密码表单。如何修改以添加“按用户名搜索”功能。例如“用户名/电子邮件”。有人能帮我吗。我是django的noob。刚开始学习 def get_users(self, email): active_users = UserModel._default_manager.filter(**{ '%s__iexact' % UserModel.get_email_field_name(): email, 'is_active': True
def get_users(self, email):
active_users = UserModel._default_manager.filter(**{
'%s__iexact' % UserModel.get_email_field_name(): email,
'is_active': True,
})
return (u for u in active_users if u.has_usable_password())
def save(self, domain_override=None,
subject_template_name='registration/password_reset_subject.txt',
email_template_name='registration/password_reset_email.html',
use_https=False, token_generator=default_token_generator,
from_email=None, request=None, html_email_template_name=None,
extra_email_context=None):
"""
Generate a one-use only link for resetting password and send it to the
user.
"""
email = self.cleaned_data["email"]
for user in self.get_users(email):
if not domain_override:
current_site = get_current_site(request)
site_name = current_site.name
domain = current_site.domain
else:
site_name = domain = domain_override
context = {
'email': email,
'domain': domain,
'site_name': site_name,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'user': user,
'token': token_generator.make_token(user),
'protocol': 'https' if use_https else 'http',
**(extra_email_context or {}),
}
self.send_mail(
subject_template_name, email_template_name, context, from_email,
email, html_email_template_name=html_email_template_name,
)
我们可以通过usign在电子邮件字段和
用户名
字段中搜索:
谢谢你,威廉。这部分呢。context={'email':email}@ashley:通常它只接受在文本框中输入的值(该文本框的名称显然是
email
,因此不应更改)。请参阅上下文部分。它从上下文部分的userinput获取电子邮件地址
from django.db.models import Q
def get_users(self, email):
active_users = UserModel._default_manager.filter(
Q(**{'%s__iexact' % UserModel.get_email_field_name(): email}) |
Q(username=email),
is_active=True
)
return (u for u in active_users if u.has_usable_password())
def save(self, domain_override=None,
subject_template_name='registration/password_reset_subject.txt',
email_template_name='registration/password_reset_email.html',
use_https=False, token_generator=default_token_generator,
from_email=None, request=None, html_email_template_name=None,
extra_email_context=None):
"""
Generate a one-use only link for resetting password and send it to the
user.
"""
email = self.cleaned_data["email"]
for user in self.get_users(email):
if not domain_override:
current_site = get_current_site(request)
site_name = current_site.name
domain = current_site.domain
else:
site_name = domain = domain_override
email = getattr(user, UserModel.get_email_field_name())
context = {
'email': email,
'domain': domain,
'site_name': site_name,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'user': user,
'token': token_generator.make_token(user),
'protocol': 'https' if use_https else 'http',
**(extra_email_context or {}),
}
self.send_mail(
subject_template_name, email_template_name, context, from_email,
email, html_email_template_name=html_email_template_name,
)