Warm tip: This article is reproduced from serverfault.com, please click

Python : name 'set_password' is not defined

发布于 2020-12-07 08:59:52

Im trying to register users hashing their passwords before add to database as follows

settings.py

PASSWORD_HASHERS = (
    'django.contrib.auth.hashers.MD5PasswordHasher',
)

Models.py

from django.contrib.auth.models import AbstractBaseUser

class Users(AbstractBaseUser):
    name = models.CharField(max_length=200)
    email =  models.CharField(max_length=200)
    password =  models.CharField(max_length=255)

Views.py

name = form.cleaned_data.get('name')
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
date_joined = date.today()

if Users.objects.filter(email=email).exists() and Users.objects.filter(name=name).exists() :
    messages.info(request, 'User already exists')
else:
    Users.objects.create(name=name, email=email, password=set_password(password), date_joined=date_joined)

but when i actually trying to create the user i get Python : name 'set_password' is not defined What is wrong? do i need to import something at Views.py?

Questioner
vemab
Viewed
11
Dean Elliott 2020-12-07 17:03:22

You must use set_password() on a user instance, not when creating a user.

Try this:

user = Users.objects.create(name=name, email=email, date_joined=date_joined)
user.set_password(password)
user.save()

I can see you are extending the user model. I'd have a look at some articles for ways to do this, I recommend this article.