En la documentación de Django, usa User.objects.create_user() para crear un usuario. Estoy confundido, ¿cuál es la diferencia entre eso y User.objects.create() y User().save() , que son las formas normales de crear objetos de otros modelos?
La diferencia más significativa es que si proporciona una contraseña para el método .create() , se establecerá textualmente en el usuario y no se podrá utilizar para autenticar al usuario.
>>> user = User.objects.create(username="foo", password="bar") >>> user.password 'bar' >>> user.check_password("bar") False En su lugar, el método create_user() el argumento de la contraseña, que es entonces.
>>> user = User.objects.create_user(username="foo", password="bar") >>> user.password 'pbkdf2_sha256$120000$2pHBVu3tYYbK$ESG1nbUY2ZhEmstJ7Fzu1DioXmGYXiLw31YDkOGn9E0=' >>> user.check_password("bar") TrueConsulte https://github.com/django/django/blob/master/django/contrib/auth/models.py#L145 .
También se hace algún otro 'ordenamiento'. Vea el resto de la función vinculada arriba.
User.objects.create_user() es una función de ayuda que proporciona utilidades útiles para crear un usuario que, de lo contrario, tendría que hacer usted mismo. Según la documentación:
Crea, guarda y devuelve un Usuario
El nombre de usuario y la contraseña se establecen como se indica. La parte del dominio del correo electrónico se convierte automáticamente a minúsculas y el objeto Usuario devuelto tendrá
is_activeestablecido enTrue.Si no se proporciona una contraseña, se llamará a
set_unusable_password().Los argumentos de la palabra clave
extra_fieldsse pasan al método__init__del usuario para permitir establecer campos arbitrarios en un modelo de usuario personalizado.
Sin create_user() , podría crear la funcionalidad usted mismo utilizando los métodos que mencionó, pero proporciona un procesamiento y una utilidad útiles.
create() y save() son métodos genéricos para crear una instancia de modelo. No hacen nada específico para el modelo de usuario, mientras que el método create_user() es un método específico para crear el usuario.
Al crear un usuario con métodos genéricos, el valor que establezca como contraseña no se codificará. Debe hacerlo usted mismo de esta manera.
u = User(username="username") u.set_password("password") u.save() Además, no puede hacer lo mismo con el método create() sin una consulta de base de datos adicional.
Mientras que con create_user() el nombre de usuario y la contraseña se establecen como se indicaron y la contraseña se codificará automáticamente y el objeto Usuario devuelto tendrá is_active establecido en True
Debería obtener el modelo de usuario:
from django.contrib.auth import get_user_model UserModel = get_user_model() user = UserModel.objects.create(username="Mr Foo", password="bar") user.save()O:
user = UserModel.objects.create_user("Mr Foo", password="bar") user.save()Si usa create_user() no necesita guardarlo con save() . create_user() ya guarda al usuario en la base de datos, consulte: https://docs.djangoproject.com/en/4.0/topics/auth/default/