programing

장고에서 사용자를 생성하는 방법은 무엇입니까?

newsource 2023. 8. 28. 21:03

장고에서 사용자를 생성하는 방법은 무엇입니까?

다음 코드로 장고 프로젝트에서 새 사용자를 생성하려고 하는데 강조 표시된 라인에서 예외가 발생합니다.

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))

도와드릴까요?

장고에서 사용자를 만드는 올바른 방법은 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()))

암호 해싱에 대한 질문:장고에서 Bcrypt를 사용하여 암호를 암호화하는 방법

Django 1.9에서 테스트했습니다.

정상적으로 사용자를 생성하는 경우 암호 생성 방법이 다를 수 있으므로 로그인할 수 없습니다. 기본 등록 양식을 사용할 수 있습니다.

from django.contrib.auth.forms import UserCreationForm

확장할 수도 있습니다.

from django.contrib.auth.forms import UserCreationForm

class UserForm(UserCreationForm):
    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' ]

그런 다음 뷰에서 이 클래스를 사용합니다.

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

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

단순히 사용하는 경우object.save()사용자를 만들기 위해 원시 암호는 데이터베이스 내부에서 직접 볼 수 있습니다.첫째, 안전하지 않습니다.둘째, 암호의 암호화가 수행되지 않아 암호 해독기가 데이터베이스 내의 원시 암호를 사용하여 잘못된 암호로 암호를 해독하므로 로그인이 불가능합니다.매번 인증 기능을 사용할 때마다django.contrib.auth당신은 실제로 그것의 해독기를 사용하고 있습니다.네, 로그인할 때마다 암호가 다시 해독되어야 합니다.

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