Создайте свою собственную модель пользователя и подтвердите логин

Доброе утро, я создал свою собственную пользовательскую модель в Django, и идея состоит в том, чтобы использовать ее для проверки входа в систему без использования model.user, который Django приносит по умолчанию. Как я могу сделать так, чтобы пользователи могли войти в мою систему?

0
задан 13.01.2017, 16:33
0 ответов

Ну, правда не причина ты не хочешь использовать модель django пользователей, в действительности я думаю, что он предлагает тебе миллион преимуществ как чтобы делать саму модель, и модель самых важных состоит в том, что ты не будешь должен разрабатывать метод, чтобы мочь сохранять пароли безопасного способа, так как эта модель это делает из-за тебя.

Джанго предлагает тебе большие способы мочь Увеличивать модель User с целью которого у тебя могло быть многие другие поля, чтобы сохранять информацию твоих пользователей, между этими формами эта делать, что у твоей модели пользователя была связь от одного до одного год с моделью пользователя django, и он состоит в том, чтобы увеличивать другую базового класса пользователя, который содержит методы пользователя django, и создавать твои собственные поля, они были бы этими двумя выборами:

1. Увеличивать модель User:

from django.contrib.auth.models import User

class Empleado(models.Model):
    usuario = models.OneToOneField(User)
    edad = models.IntegerField()
    genero = ...
    fecha_nacimiento = ...

И получать использованный такой Пользователь:

usuario = User.objects.get(id=id)
usuario.empleado.edad

2. Создавать Модель, которую он получал в наследство бы от класса базового пользователя:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass
    # agregas tus otros campos, esta es una forma mas directa, ya que guardas todos los datos en la misma tabla

Второй формы то, что ты уберегаешься, является консультацией в таблицу персонала, так как у тебя могут быть все данные в той же таблице.

Во втором случае, ты должен добавлять эту линию в settings.py

AUTH_USER_MODEL = 'myapp.User'

Сейчас, чтобы делать эффективный autentificacion, ты должен создавать файл, который из-за соглашения называется 'backend.py', и ты должен добавлять следующее:

# debes importar tu modelo de usuario, independiente de cual sea
from yoursite.models import Usuario

class UserAuthentificacionBackend(object):
    def authenticate(self, username=None, password=None):
        try:
            user = Usuario.objects.get(username=username)
            # en este punto, debes verificar la contraseña, yo lo hare como lo hace el modelo de usuario de django, siguiendo los metodos que trae este
            if user.check_password(password):
                return user
        except Usuario.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return Usuario.objects.get(id=user_id)
        except:
            return None

Идея backend - класс, который он получал в наследство бы object с двумя важными методами, get_user и authenticate, которые, будучи назван указанными параметрами, должны возвращаться пользователь в случае, если он будет существовать, или не возвращать ничего в противоположном случае.

Заметь: Также как и используй username смоги использовать просто электронную почту, или то, что ты хочешь, чтобы делать login или autentificación.

В конце концов, что ты должен делать, состоит в том, чтобы сообщать Джанго, что ты используешь новый backend для autentificación, делая следующее:

В settings.py:

AUTHENTICATION_BACKENDS = ('ruta.a.tu.backend.UserAuthentificacionBackend',)

Имей в виду, что маршруты - с точками, где ты называешь app (app должен быть в INSTALLED_APPS), который был бы первой частью маршрута, и каждое расставание в точках может быть каталогом или файлом, и последний (в этом случае UserAuthentificacionBackend) принадлежит классу внутри файла маршрута.

Если ты изменяешь модель пользователя и не меняешься AUTH_USER_MODEL может быть, ты не функционировал администратор Джанго

Любое сомнение, прокомментируй

2
ответ дан 03.12.2019, 17:41

Теги

Похожие вопросы