Saya mencoba untuk membuat Pengguna baru dalam proyek Django dengan kode berikut, tetapi baris yang disorot memicu pengecualian.
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))
Ada bantuan?
Jawaban:
Cara yang benar untuk membuat pengguna di Django adalah dengan menggunakan fungsi create_user. Ini akan menangani hashing kata sandi, dll ..
from django.contrib.auth.models import User user = User.objects.create_user(username='john', email='[email protected]', password='glass onion')
sumber
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
EDIT: ini berfungsiDJANGO_SETTINGS_MODULE=app.settings.dev python manage.py shell < register-user.py
from django.contrib.auth import get_user_model
danuser = get_user_model().objects.create_user(...
Sudahkah Anda memastikan bahwa Anda menyampaikan nilai sebenarnya dan tidak
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')
sumber
Pembuatan pengguna massal dengan
set_password
Saya Anda membuat beberapa pengguna uji,
bulk_create
jauh lebih cepat, tetapi kami tidak dapat menggunakannyacreate_user
.set_password
adalah cara lain untuk membuat sandi berciri: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()))
Pertanyaan khusus tentang pencirian kata sandi: Bagaimana menggunakan Bcrypt untuk mengenkripsi kata sandi di Django
Diuji di Django 1.9.
sumber
Jika Anda membuat pengguna secara normal, Anda tidak akan dapat login karena metode pembuatan kata sandi mungkin berbeda Anda dapat menggunakan formulir pendaftaran default untuk itu
from django.contrib.auth.forms import UserCreationForm
Anda juga bisa memperpanjangnya
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' ]
Kemudian di lihat gunakan kelas ini
class UserCreate(CreateView): form_class = UserForm template_name = 'registration/signup.html' success_url = reverse_lazy('list') def form_valid(self, form): user = form.save()
sumber