自定义用户和表单实现

时间:2015-11-03 22:41:59

标签: python django

使用django-registration-redux时遇到问题。

我想将其他字段添加到用户作为生日,电话等,但是我很难在模型中扩展User类。将这些字段添加到我的用户并在表单注册和登录中显示的最佳表单是什么?

1 个答案:

答案 0 :(得分:2)

我建议按照以下步骤操作:

  1. 定义您的用户模型,添加您的deird字段,例如birth_datephoto

    # filename: myapp/models.py
    
    from django.db import models
    from django.utils.translation import ugettext as _
    from datetime import datetime
    from django.conf import settings
    from django.contrib.auth.models import AbstractUser, Group
    
    class MyUser(AbstractUser):
    
        birth_date = models.DateField(null=True)
        photo = models.ImageField(upload_to=..., null=True, blank=True, verbose_name=_("photo"))
    
  2. 创建自定义注册表单:

    # in file myapp/forms.py
    from django import forms
    from registration.forms import RegistrationForm
    
    class MyRegistrationForm(RegistrationForm):
    
        birth_date = ...
        photo = ...
    
  3. 编写自定义注册视图:

    # in file myapp/views.py
    
    from registration.backends.simple.views import RegistrationView
    from .forms import MyRegistrationForm
    
    class MyRegistrationView(RegistrationView):
    
        form_class = MyRegistrationForm
    
        def register(self, request, form):
    
            user = super(MyRegistrationView, self).register(request, form)
            user.birth_date = form.cleaned_data["birth_date"]
            user.photo = form.cleaned_data["photo"]
    
            user.save()
    
            return user
    
  4. 告诉系统您将使用自定义用户模型

    # in file settings.py
    AUTH_USER_MODEL = "myapp.MyUser"
    
  5. 添加网址以调用自定义注册视图

    # in file urls.py
    
    from myapp.views import MyRegistrationView
    ...
    
    urlpatterns = [
        ...
        url(r'^accounts/register/$', MyRegistrationView.as_view(), name="registration_register"),
        ...
    ]