将Django ModelForm转换为使用User对象

时间:2013-09-14 17:25:23

标签: python django user-input django-forms django-users

我正在为我的网站创建一个注册表单。

我只使用username, email, password对象中User的标准字段条目。

已创建数据库表。

Models.py

class RegistrationForm(ModelForm):
    class Meta:
        model = User

views.py

def Registration(request):
    RegForm = RegistrationForm(request.POST or None)
    if request.method == 'POST':
        if RegForm.is_valid():
            newUser = User.objects.create_user(username, email, password)

            RegForm.save()
            try:
                return HttpResponseRedirect('/Newuser/?userNm=' + clearUserName)
            except:
                raise ValidationError(('Invalid request'), code='300')    ## [ TODO ]: add a custom error page here.

我的问题是,我如何表示这些字段:

username, email, password

在这一行(从视图中):

newUser = User.objects.create_user(username, email, password)

是models.py?{/ p>中RegistrationForm()的一部分

此外:如何在forms.py中的User中正确表示此默认模型(modelform)?

2 个答案:

答案 0 :(得分:1)

回答你的第二个问题:

使用UserCreationForm来表示User类的注册过程,它会为您处理验证和保存,您可以随时对其进行扩展(即添加电子邮件字段)

User类有很多相关的表单,具体取决于用例:身份验证,注册,密码更改等。阅读有关身份验证的文档以查找更多内容。

https://docs.djangoproject.com/en/1.5/topics/auth/default/#module-django.contrib.auth.forms

答案 1 :(得分:0)

您可以使用cleaning_date从表单中获取经过验证的数据:

username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']

newUser = User.objects.create_user(username, email, password)

现在我认为您的方法存在严重问题,因为您在创建用户对象后再次保存表单,User对象也希望密码字段是密码的哈希值和一些元数据等。 我强烈建议您使用django-registration(或者至少看看它)除了电子邮件验证之外还为您处理所有这些内容,您只需提供模板(还可以找到一些模板)它像this

相关问题