python - Django-allauth 将注册限制为电子邮件列表
问题描述
我正在使用 Django-allauth,我有一个电子邮件列表,我想将注册限制在这个列表中。我的想法是检查注册用户的电子邮件,如果不在电子邮件列表中,则停止注册过程并重定向。正如 Chetan Ganji 所建议的,我尝试编辑 allauth.account.views.SignupView 但它不订阅 form_valid 方法。我怎样才能做到这一点?谢谢你的帮助
from allauth.account.views import SignupView
class AllauthCustomSignupView(SignupView):
def form_valid(self, form):
email = form.cleaned_data['email']
auth_user_list = [ 'email_1',
'email_2',
...
]
if not any(email in s for s in auth_user_list):
return reverse('url')
return super(MySignupView, self).form_valid(form)
解决方案
你可以通过扩展DefaultAccountAdapter
类来做到这一点。您必须想办法按需存储和获取受限列表。然后,您可以使用适配器并在注册中引发验证错误。扩展 aDefaultAccountAdapter
并覆盖 clean_email 方法。在您的项目目录中创建一个 adapter.py 并扩展默认的适配器类。
from allauth.account.adapter import DefaultAccountAdapter
from django.forms import ValidationError
class RestrictEmailAdapter(DefaultAccountAdapter):
def clean_email(self,email):
RestrictedList = ['Your restricted list goes here.']
if email in RestrictedList
raise ValidationError('You are restricted from registering. Please contact admin.')
return email
最后,将 settings.py 中的帐户适配器指向您的扩展类。
ACCOUNT_ADAPTER = 'YourProject.adapter.RestrictEmailAdapter'
推荐阅读
- javascript - CSS Flex - 单击时元素底部的随机空白
- swift - 推送通知中未显示类别
- java - Google admob 和 Facebook 受众网络可以在不使用中介的情况下在同一个应用上投放广告吗?
- python - 如何将三层嵌套的dict转换为三层嵌套的defaultdict?
- java - 崩溃主细节流(Android Studio)应用程序〜在Mac上
- excel - 从特定工作表中删除 Excel 中的重复行
- typescript - 具有工作自动完成功能的“keyof”和“string”的联合类型
- typeorm - 限制来自 TypeORM 的日志记录,而不是禁用
- typescript - 如何从对象元组创建对象类型?
- angular - 使用 Angular SSR 在导航中保持 queryParameters