Django - 部署时身份验证不起作用

时间:2021-06-07 17:43:02

标签: python django

我在部署 Django 应用程序后无法登录,但在使用内置开发服务器时可以。我会在下面列出错误和我使用的内容。我已经迁移到 live sql server 没有错误。我创建了一个没有错误的超级用户。对 django 文件唯一真正的改变是设置了不应该影响数据库的静态文件(我假设这个错误来自哪里)。这是错误:

<块引用>

“NoneType”类型的 /login/ 参数中的 TypeError 不可迭代
请求方式:POST 请求地址:http://sitename/login/
Django 版本:3.0 异常类型:TypeError 异常值:参数 类型 'NoneType' 不可迭代
异常 位置:c:\python39\lib\site-packages\sql_server\pyodbc\base.py中 encode_value,第 59 行
Python 可执行文件:c:\python39\python.exe Python
版本:3.9.4

现在关于环境中运行的内容及其部署方式的一些核心说明:

部署在windows IIS上
在 django_mssql_backend-2.8.1 中使用 mssql(我验证了所有软件包都在同一版本上。我认为唯一的区别是开发中的 3.9.1 与生产中的 3.9.4 上的 python)
Django 3.0 SQL Server 是 2019 年的开发版与 2017 年的生产版。不确定这是否会改变任何东西,或者我因此需要更改任何设置,但初始迁移命令和创建用户命令有效。 pyodbc-4.0.30
wfastcgi-3.0.0(仅限产品)
使用 django.contrib.auth(身份验证、登录、注销)进行身份验证。再次,所有工作在开发环境中。

有没有人知道为什么这在生产环境中与在开发环境中运行时的功能不同?事实上,它在运行 manage.py runserver 时运行良好(可以登录/退出),但在通过 IIS 访问时却没有。

编辑:登录视图在下面,主要是按照 youtube 教程和下面的完整错误回溯完成的:

def loginpage(request):
if request.user.is_authenticated:
    return redirect('alfred-home')
else:
    if request.method== 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

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

        if user is not None:
            login(request, user)
            return redirect('alfred-home')
        else:
            messages.info(request, 'Username or password is incorrect')

    context = {}
    return render(request, 'authentication/login.html', context)

错误信息:

Environment:


Request Method: POST
Request URL: http://lsdmalfred/login/?next=/

Django Version: 3.0
Python Version: 3.9.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'home.apps.HomeConfig',
 'authentication.apps.AuthenticationConfig',
 'automation.apps.AutomationConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "c:\python39\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "c:\python39\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "c:\python39\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\inetpub\alfred\alfred\authentication\views.py", line 30, in loginpage
    user = authenticate(request, username=username, password=password)
  File "c:\python39\lib\site-packages\django\contrib\auth\__init__.py", line 72, in authenticate
    user = backend.authenticate(request, **credentials)
  File "c:\python39\lib\site-packages\django\contrib\auth\backends.py", line 46, in authenticate
    user = UserModel._default_manager.get_by_natural_key(username)
  File "c:\python39\lib\site-packages\django\contrib\auth\base_user.py", line 44, in get_by_natural_key
    return self.get(**{self.model.USERNAME_FIELD: username})
  File "c:\python39\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "c:\python39\lib\site-packages\django\db\models\query.py", line 411, in get
    num = len(clone)
  File "c:\python39\lib\site-packages\django\db\models\query.py", line 258, in __len__
    self._fetch_all()
  File "c:\python39\lib\site-packages\django\db\models\query.py", line 1261, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "c:\python39\lib\site-packages\django\db\models\query.py", line 57, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "c:\python39\lib\site-packages\django\db\models\sql\compiler.py", line 1124, in execute_sql
    sql, params = self.as_sql()
  File "c:\python39\lib\site-packages\sql_server\pyodbc\compiler.py", line 177, in as_sql
    supports_offset_clause = self.connection.sql_server_version >= 2012
  File "c:\python39\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 400, in sql_server_version
    with self.temporary_connection() as cursor:
  File "c:\python39\lib\contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "c:\python39\lib\site-packages\django\db\backends\base\base.py", line 604, in temporary_connection
    with self.cursor() as cursor:
  File "c:\python39\lib\site-packages\django\utils\asyncio.py", line 24, in inner
    return func(*args, **kwargs)
  File "c:\python39\lib\site-packages\django\db\backends\base\base.py", line 260, in cursor
    return self._cursor()
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 218, in _cursor
    conn = super()._cursor()
  File "c:\python39\lib\site-packages\django\db\backends\base\base.py", line 236, in _cursor
    self.ensure_connection()
  File "c:\python39\lib\site-packages\django\utils\asyncio.py", line 24, in inner
    return func(*args, **kwargs)
  File "c:\python39\lib\site-packages\django\db\backends\base\base.py", line 220, in ensure_connection
    self.connect()
  File "c:\python39\lib\site-packages\django\utils\asyncio.py", line 24, in inner
    return func(*args, **kwargs)
  File "c:\python39\lib\site-packages\django\db\backends\base\base.py", line 197, in connect
    self.connection = self.get_new_connection(conn_params)
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 293, in get_new_connection
    connstr = encode_connection_string(cstr_parts)
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 49, in encode_connection_string
    return ';'.join(
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 50, in <genexpr>
    '%s=%s' % (k, encode_value(v))
  File "c:\python39\lib\site-packages\sql_server\pyodbc\base.py", line 59, in encode_value
    if ';' in v or v.strip(' ').startswith('{'):

Exception Type: TypeError at /login/
Exception Value: argument of type 'NoneType' is not iterable

数据库设置:

DATABASES = {
'default': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': 'removeddbname',
    'USER': 'removedusername',
    'PASSWORD': removedpassword,
    'OPTIONS': {
        'driver': 'ODBC Driver 17 for SQL Server',
    },
},

}

0 个答案:

没有答案