Development Tip

Django에서 사용자를 만드는 방법은 무엇입니까?

yourdevel 2020. 11. 6. 20:41
반응형

Django에서 사용자를 만드는 방법은 무엇입니까?


다음 코드로 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))

도움이 필요하세요?


Django에서 사용자를 생성하는 올바른 방법은 create_user 함수를 사용하는 것입니다. 이것은 암호의 해싱 등을 처리합니다.

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

실제 값이 아니라 실제 값을 전달하고 있음을 확인 했습니까 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')

대량 사용자 생성 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()))

비밀번호 해싱에 관한 질문 : Django에서 Bcrypt를 사용하여 비밀번호를 암호화하는 방법

Django 1.9에서 테스트되었습니다.


정상적으로 사용자를 생성하면 비밀번호 생성 방법이 다를 수 있으므로 로그인이 불가합니다. 기본 가입 양식을 사용할 수 있습니다.

from django.contrib.auth.forms import UserCreationForm

You can extend that also

from django.contrib.auth.forms import UserCreationForm

class UserForm(forms.ModelForm):
    mobile = forms.CharField(max_length=15, min_length=10)
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ['username', 'password', 'first_name', 'last_name', 'email', 'mobile' ]

Then in view use this class

class UserCreate(CreateView):
    form_class = SignUpForm
    template_name = 'registration/signup.html'
    success_url = reverse_lazy('list')

    def form_valid(self, form):
        user = form.save()

참고URL : https://stackoverflow.com/questions/10372877/how-to-create-a-user-in-django

반응형