Django - Аутентификация против существующей БД - PullRequest
0 голосов
/ 24 сентября 2018

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

У меня есть приложение с базой данных postgres, где я аутентифицирую своих пользователей.Я написал приложение в Django для взаимодействия с некоторыми таблицами и отображения информации для пользователя.Я хотел бы использовать Django для входа и отслеживания сеансов пользователей с этой БД.поэтому я могу использовать такие функции, как

{% if user.is_authenticated %}

, но я не хочу использовать команду migrate, поэтому я не хочу изменять существующую БД.Я могу получить доступ к таблице, в которой находится информация об учетной записи, поскольку я создал для нее модель.

Я вижу, что вы можете использовать параметр входа в систему для удаленного пользователя, но я не могу найти образец или руководство по его использованию, и я полностью потерян,

Прямо сейчас я создаю форму входа на странице просмотра.Затем получите имя пользователя и пароль, которые введены, но я не знаю, что делать дальше.Также нужно будет хешировать пароль.Есть ли в djano библиотека, которая сделает это для приложения.

Буду признателен за любые указатели или онлайн-руководства.

Вот представления для входа в систему

if request.method == "POST":
    form = LoginForm(request.POST)
    if form.is_valid():
        email = form.data['account_email']
        password = form.data['account_password']

        user = authenticate(username=email)

        if user.check_password(password):
            login(request, user)
            return redirect('myapp:cust_select')
        else:
            # Username and password did not match
            raise ValidationError('Invalid Username/Password')

return render(request, 'myapp/login.html', {'form' : form}

backends.py

from django.conf import settings
from django.contrib.auth import get_user_model


class UserAuthBackend(object):    
    def authenticate(self, username=None, password=None):
        try:
            account = get_user_model()

            user = account.objects.get(account_email=username)
            if user:
                return user
        except account.DoesNotExist:
            print "account not found"
        return None 

    def get_user(self, user_id):
       try:
          account = get_user_model()
          return account.objects.get(pk=user_id)
       except User.DoesNotExist:
          return None

models.py

class Accounts(AbstractUser):
    account_id = models.AutoField(primary_key=True)
    account_email = models.CharField(max_length=100)
    account_password = models.CharField(max_length=20)

    def __str__(self):
         return self.account_email 

    class Meta:
        managed = False
        db_table = 'accounts'

settings.py

 AUTHENTICATION_BACKENDS = ( 'myapp.backends.UserAuthBackend', )

Он продолжает выходить с той же ошибкой в ​​запросе sql.столбец account.password не существует. ЛИНИЯ 1: ВЫБЕРИТЕ «account». «password», «accounts». «last_login», «acco ...

. Похоже, он не использует мою модель Account.выберите его из этой таблицы, но как мне заставить его прекратить запрашивать accounts.password и accounts.last_login, поскольку их нет в модели y Accounts

1 Ответ

0 голосов
/ 24 сентября 2018

Для ссылка Примечание: вам нужно попробовать, поймать, чтобы этот код работал

def login(request):
    form = LoginForm()

    if request.method == "POST":
    form = LoginForm(request.POST)
        if form.is_valid():
            username = form.data['account_email']
            password = form.data['account_password']

            # First authenticate
            user = authenticate(request, username=username, password=password)

            if user is not None  :
                # Succeed, now log user in
                login(request,user)
                return redirect('myapp:select')
            else:
                # Username and password did not match
                raise ValidationError('Invalid Username/Password')

     return render(request, 'myapp/login.html', {'form' : form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...