장고에서 사용자를 생성하는 방법은 무엇입니까?
다음 코드로 장고 프로젝트에서 새 사용자를 생성하려고 하는데 강조 표시된 라인에서 예외가 발생합니다.
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
'programing' 카테고리의 다른 글
Swift에서 프로토콜의 관련 유형이 일반 유형 구문을 사용하지 않는 이유는 무엇입니까? (0) | 2023.08.28 |
---|---|
업데이트 시 MYSQL(MariaDB) 계산된 백분율 열 (0) | 2023.08.28 |
div에 대한 jQuery "눈 깜빡이는 하이라이트" 효과? (0) | 2023.08.28 |
이동/이름 변경된 파일에 대해 Git Diff를 수행하는 방법은 무엇입니까? (0) | 2023.08.28 |
jQuery를 사용하여 클릭 이벤트 핸들러를 모두 제거하는 방법은 무엇입니까? (0) | 2023.08.28 |