django - 自定义注册表单中的 Django allauth 访问请求
问题描述
我想在 Django 的 init 方法中访问请求对象allauth
我拥有的自定义表单代码
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'email' in self.request.session:
self.fields['email'].value = self.request.session['email']
self.fields['email'].disabled = True
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
我使用表单的自定义视图是
from allauth.account.views import SignupView
class CustomFormSignupView(SignupView):
form_class = CustomSignupForm
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['request'] = self.request
return kwargs
解决方案
实际上,您无需覆盖帐户视图即可将电子邮件放入视图中。从this implementation
中,我可以看到,如果您在 session 中针对 key 设置电子邮件account_verified_email
,那么它应该出现在表单中。
不过,如果您覆盖accounts.SignupView
,则执行以下步骤:
首先,您需要CustomFormSignupView
输入网址:
urlpatterns =+ [
url(r'^accounts/', include('allauth.urls')),
url(r'^accounts/signup/$', CustomFormSignupView.as_view(), name="account_signup")
]
并更新表格:
from allauth.account.forms import SignupForm
class CustomSignupForm(SignupForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
if 'email' in self.request.session:
self.fields['email'].value = self.request.session['email']
self.fields['email'].disabled = True
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
推荐阅读
- java - 观察者和 getstyleclass() 监听器之间的 Javafx 冲突
- java - 如何使可滚动的 JPanel 显示 JLabels
- python - 无法安装 BeautifulSoup4 模块
- oauth-2.0 - firebase 提供的刷新令牌是否与谷歌提供的刷新令牌相同?
- mongodb - MongoDB 加入/聚合查询在控制台中返回静默
- javascript - Vue.js Push 不更新视图
- php - Yii2 使用 ArrayHelper::map,在第三个参数上返回 child
- r - 带有R ggplot2的多个饼图
- python - django ORM 中的多个查询
- sql - 带有 ORDER BY 的 CASE 导致“操作数类型冲突:float 与日期不兼容”T-SQL