在我的django项目中,我需要添加注册功能。问题是在注册过程中我不能在任何地方使用'userprofile'。我的用户由“名字”,“姓氏”和其他一些数据定义。怎么做到这一点?除了启用contrib.auth和'registration'之外,我还创建了一个'用户'应用程序。在user.models中,我有一个带有附加字段的扩展用户模型。在user.forms中,我创建了扩展注册表单:
class ExtendedRegistrationForm(RegistrationForm):
first_name = forms.CharField(
label="First name",
error_messages={'required': 'Please fill the first name field'},
)
last_name = forms.CharField(
label="Last name",
error_messages={'required': 'Please fill the last name field'},
)
def save(self, profile_callback=None):
user = super(ExtendedRegistrationForm, self).save()
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
在user.views中,我有一个自定义注册视图:
def custom_register(request, success_url=None,
form_class=ExtendedRegistrationForm, profile_callback=None,
template_name='registration/registration_form.html',
extra_context=None):
def _create_profile(user):
p = UserProfile(user=user)
p.is_active = False
p.first_name = first_name
p.last_name = last_name
p.save()
return register(request,
success_url="/accounts/register/complete",
form_class=ExtendedRegistrationForm,
profile_callback=_create_profile,
template_name='registration/registration_form.html',
extra_context=extra_context,
)
我也覆盖了我项目的注册网址:
url(r'^accounts/password/reset/$',
auth_views.password_reset, { 'post_reset_redirect' : '/',
'email_template_name' : 'accounts/password_reset_email.html' },
name='auth_password_reset', ),
url(r'^accounts/password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
auth_views.password_reset_confirm, { 'post_reset_redirect' : '/accounts/login/'},
name='auth_password_reset_confirm'),
url(r'^accounts/password/reset/complete/$',
auth_views.password_reset_complete,
name='auth_password_reset_complete'),
url(r'^accounts/password/reset/done/$',
auth_views.password_reset_done,
name='auth_password_reset_done'),
url(r'^accounts/register/$',
'user.views.custom_register',
name='registration_register'),
(r'^accounts/', include('registration.urls')),
所以我有一个良好的基础,但如何摆脱'用户名'?我可以将用户名视为first_name(这么多同名的用户)或django会抱怨吗?
答案 0 :(得分:0)
当我不得不解决这个问题时,最简单的方法是在注册过程中不包含“扩展用户配置文件”。当他们第一次登录时,重定向他们或向他们发送消息以填写表格。这至少应该让你继续前进。我很快就会自己解决这个问题,所以当我找到更具体的解决方案时,我会发布它。
我仍然不确定你无法访问用户名是什么意思...这是auth.models.User的一部分,所以它可用。您是否忽略User中已有的基本字段?...
答案 1 :(得分:0)
为什么不在save上生成用户名,基于first_name和last_name?