如何在Django中创建用户?

2024-04-30 04:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过下面的代码在Django项目中创建一个新用户,但是突出显示的行触发了一个异常。

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed

    **user = User.objects.create_user(userName, userMail, userPass)**
    user.save()

    return render_to_response('home.html', context_instance=RequestContext(request))

有什么帮助吗?


Tags: 项目django代码用户nonegetrequestdef
3条回答

您是否确认传递的是实际值而不是None

from django.shortcuts import render

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed
    if userName and userPass and userMail:
       u,created = User.objects.get_or_create(userName, userMail)
       if created:
          # user was created
          # set the password here
       else:
          # user was retrieved
    else:
       # request was empty

    return render(request,'home.html')

在Django中创建用户的正确方法是使用create_user函数。这将处理密码的散列等。。

from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
                                 email='jlennon@beatles.com',
                                 password='glass onion')

使用set_password批量创建用户

如果您正在创建多个测试用户,bulk_create要快得多,但是我们不能将create_user与它一起使用。

set_password是生成哈希密码的另一种方法:

def users_iterator():
    for i in range(nusers):
        is_superuser = (i == 0)
        user = User(
            first_name='First' + str(i),
            is_staff=is_superuser,
            is_superuser=is_superuser,
            last_name='Last' + str(i),
            username='user' + str(i),
        )
        user.set_password('asdfqwer')
        yield user

class Command(BaseCommand):
    def handle(self, **options):
        User.objects.bulk_create(iter(users_iterator()))

有关密码哈希的特定问题:How to use Bcrypt to encrypt passwords in Django

在Django 1.9测试。

相关问题 更多 >