我正在尝试通过以下代码在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))
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
kei*_*rth 156
在Django中创建用户的正确方法是使用create_user函数.这将处理密码的散列等.
from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
email='jlennon@beatles.com',
password='glass onion')
Run Code Online (Sandbox Code Playgroud)
Bur*_*lid 23
你确认你传递的是实际值而不是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')
Run Code Online (Sandbox Code Playgroud)
批量用户创建 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()))
Run Code Online (Sandbox Code Playgroud)
有关密码散列的具体问题:如何使用Bcrypt加密Django中的密码
在Django 1.9中测试过.
如果您正常创建用户,则将无法登录,因为密码创建方法可能有所不同。您可以使用默认的注册表单
from django.contrib.auth.forms import UserCreationForm
Run Code Online (Sandbox Code Playgroud)
您也可以扩展
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' ]
Run Code Online (Sandbox Code Playgroud)
然后在视图中使用此类
class UserCreate(CreateView):
form_class = SignUpForm
template_name = 'registration/signup.html'
success_url = reverse_lazy('list')
def form_valid(self, form):
user = form.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90361 次 |
| 最近记录: |