TypeError: login () получил неожиданный аргумент ключевого слова 'имя_ шаблона' - PullRequest
0 голосов
/ 20 апреля 2019

Я обновил свой проект с Django 1.11 до 2.2, внес все изменения, но пришел с новой ошибкой, которая говорит, что login () получил неожиданный аргумент ключевого слова 'template_name'. Он отлично работал с предыдущей версией Django 1.11 (Все остальные URL-адреса работают, только целевая страница выдает ошибку). Я не мог найти никаких ссылок на эту проблему. Ниже приведена ошибка, URL-адреса и представления проблемы.

Internal Server Error: /
Traceback (most recent call last):
  File "C:\Users\User\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\User\PycharmProjects\MyWebsite\landing\views.py", line 43, in landing_validation
    login_response = login(request, template_name='landing.html')
TypeError: login() got an unexpected keyword argument 'template_name'
[19/Apr/2019 16:20:00] "GET / HTTP/1.1" 500 71948

Посадка \ urls.py

from django.conf.urls import url
from landing.views import landing_validation

app_name='landing'
urlpatterns = [
    url(r'^$', landing_validation, name='landing')
]

Посадка \ views.py

from django.contrib.auth import login 

def landing_validation(request):
  login_response = login(request, template_name='landing.html')

  return login_response

C:. \ Users \ User \ venv \ Lib \ сайт-пакеты \ Джанго \ вно \ auth__init __ Py

def login(request, user, backend=None):

    """
    Persist a user id and a backend in the request. This way a user doesn't
    have to reauthenticate on every request. Note that data set during
    the anonymous session is retained when the user logs in.
    """
    session_auth_hash = ''
    if user is None:
        user = request.user
    if hasattr(user, 'get_session_auth_hash'):
        session_auth_hash = user.get_session_auth_hash()

    if SESSION_KEY in request.session:
        if _get_user_session_key(request) != user.pk or (
                session_auth_hash and
                not constant_time_compare(request.session.get(HASH_SESSION_KEY, ''), session_auth_hash)):
            # To avoid reusing another user's session, create a new, empty
            # session if the existing session corresponds to a different
            # authenticated user.
            request.session.flush()
    else:
        request.session.cycle_key()

    try:
        backend = backend or user.backend
    except AttributeError:
        backends = _get_backends(return_tuples=True)
        if len(backends) == 1:
            _, backend = backends[0]
        else:
            raise ValueError(
                'You have multiple authentication backends configured and '
                'therefore must provide the `backend` argument or set the '
                '`backend` attribute on the user.'
            )
    else:
        if not isinstance(backend, str):
            raise TypeError('backend must be a dotted import path string (got %r).' % backend)

    request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
    request.session[BACKEND_SESSION_KEY] = backend
    request.session[HASH_SESSION_KEY] = session_auth_hash
    if hasattr(request, 'user'):
        request.user = user
    rotate_token(request)
    user_logged_in.send(sender=user.__class__, request=request, user=user)

Ответы [ 3 ]

1 голос
/ 20 апреля 2019

Используемая вами функция login на самом деле не является представлением. Это просто обычная функция, которую вы можете использовать для аутентификации пользователя и установки файла cookie сеанса и т. Д.

Прочитайте документы для его использования: https://docs.djangoproject.com/en/2.2/topics/auth/default/#django.contrib.auth.login


Судя по вашему коду, похоже, что вы хотите использовать LoginView.

from django.contrib.auth.views.auth_views import LoginView

def landing_validation(request):
    login_response = LoginView.as_view()(request, template_name='landing.html')

    return login_response
1 голос
/ 20 апреля 2019

Вы можете видеть, что django.contrib.auth.login принимает запрос, пользователя и необязательный бэкэнд.Нет имени шаблона.Это не изменилось в последнее время, поэтому я думаю, что вы также столкнетесь с такой же проблемой в 1.11.

Похоже, что вы хотите функцию представления, но django.contrib.auth.login - это не так.Ответ не возвращается.

0 голосов
/ 23 апреля 2019

Не было необходимости делать просмотр_посадки посадки, эта строка решила проблему.

url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...