【问题标题】:Django-registration: How to make account creation ask for first/last nameDjango-registration:如何让帐户创建要求输入名字/姓氏
【发布时间】:2013-03-24 08:07:36
【问题描述】:

我正在使用 Django-Registration 包让用户创建帐户、对其进行身份验证并登录到我的 web 应用程序。

但是,用于创建帐户的表单/视图不会要求用户输入名字/姓氏(这些字段是模型 BTW 的一部分)。它只询问他们的电子邮件地址、登录 ID 和密码(两次)。我希望它询问用户的名字/姓氏(这些字段可以是可选的......但它仍然应该询问)。我找不到要修改的表单和查看文件,因此它要求提供此信息。我修改了模板文件。但是没有表单和视图的修改是没有用的。这是怎么做到的?

【问题讨论】:

    标签: django django-registration


    【解决方案1】:

    在您的 forms.py 中,扩展 DjangoRegistration 表单,如下所示:

    class MyExtendedForm(RegistrationForm):
        first_name = forms.CharField(widget=forms.TextInput(label="first_name"))
        last_name = forms.CharField(widget=forms.TextInput(label="last_name"))
    

    urls.py 中,告诉django-registration 使用这个扩展形式:

    # using my registration form to override the default
    (r'^register/$', 
        register, 
        {'backend': 'registration.backends.default.DefaultBackend',
         'form_class': MyExtendedForm}),
    

    定义user_created以保存额外信息:

    def user_created(sender, user, request, **kwargs):
        """
        Called via signals when user registers. Creates different profiles and
        associations
        """
        form = MyExtendedForm(request.Post)
        # Update first and last name for user
        user.first_name=form.data['first_name']
        user.last_name=form.data['last_name']
        user.save()
    

    然后,注册来自 django-registration 的信号,以便在处理完任何注册后调用您的函数:

    from registration.signals import user_registered
    user_registered.connect(user_created)
    

    【讨论】:

    • 在对上面的代码进行了一些相对较小的编辑之后,这很有效。谢谢!
    • 我的编辑还没有发布。没有它们,您的代码将无法工作。因此,为了其他人的利益,我将它们发布在这里:MyExtendedForm 类的两行中的每一行都缺少右括号。 user_created 中的第一行也应该是 form = MyExtendedForm(request.Post)。并且 user_created 的定义必须在你为来自 Django-registration 的信号注册之前发生。
    • 是的,我刚刚按逻辑顺序给出了原型代码。很高兴它对你有用。
    • 使用 django-registration 0.8 时遇到“无法导入名称注册”错误。 I've posted a fix.
    • 有一个错字,应该是request.POST(全大写)
    【解决方案2】:

    一旦您按照here 所示设置了所有内容,请使用以下 CustomUserForm:

    class CustomUserForm(RegistrationForm):
        class Meta(RegistrationForm.Meta):
            model = CustomUser
            fields = ['first_name','last_name','username','email','password1','password2']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2013-06-13
      • 2016-02-22
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多