Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:login()得到一个意外的关键字参数';模板名称';_Python_Django - Fatal编程技术网

Python TypeError:login()得到一个意外的关键字参数';模板名称';

Python TypeError:login()得到一个意外的关键字参数';模板名称';,python,django,Python,Django,我将我的项目从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\ven

我将我的项目从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
url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')
登录\url.py

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

app_name='landing'
urlpatterns = [
    url(r'^$', landing_validation, name='landing')
]
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\site packages\django\contrib\auth\uuuuu init\uuuuuuu.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)

您可以看到django.contrib.auth.login接受请求、用户和可选后端。没有模板名称。这一点最近没有改变,所以我认为在1.11中也会遇到同样的问题


看起来您需要一个视图函数,但django.contrib.auth.login不是这样。它不会返回响应。

您使用的
登录
功能实际上不是视图。它只是一个常规函数,您可以使用它来验证用户身份并设置会话cookie等

请阅读文档了解其用法:


根据您的代码判断,您似乎想要使用它


没有必要进行着陆确认查看,这一行解决了问题

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
url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')

在Django 2.2应用程序中,我通过使用
LoginView
而不是
login
修复了类似错误

文件users/url.py:


这让我摆脱了模板名称的问题,但我现在遇到了新的问题。TemplateDoesNotExist at/registration/login.html请求方法:获取请求URL:Django版本:2.2异常类型:TemplateDoesNotExist异常值:registration/login.html
没有名为“Django.contrib.auth.views.auth_views”的模块django.contrib.auth.views不是一个包
@用户感谢您指出这一点。它应该是来自django.contrib.auth.views import LoginView的
。我也更新了我的答案。