我最近将Django版本从2.2迁移到3.2,之后登录就停止了。在2.2中,它运行良好。它给出了一个错误:-
> Traceback (most recent call last):
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/core/handlers/exception.py",
> line 47, in inner
> response = get_response(request)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/core/handlers/base.py",
> line 181, in _get_response
> response = wrapped_callback(request, *callback_args, **callback_kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/generic/base.py",
> line 70, in view
> return self.dispatch(request, *args, **kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/utils/decorators.py",
> line 43, in _wrapper
> return bound_method(*args, **kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/decorators/debug.py",
> line 89, in sensitive_post_parameters_wrapper
> return view(request, *args, **kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 146, in dispatch
> return super(LoginView, self).dispatch(request, *args, **kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 74, in dispatch
> response = super(RedirectAuthenticatedUserMixin, self).dispatch(
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/views/generic/base.py",
> line 98, in dispatch
> return handler(request, *args, **kwargs)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 102, in post
> response = self.form_valid(form)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/views.py",
> line 159, in form_valid
> return form.login(self.request, redirect_url=success_url)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/forms.py",
> line 196, in login
> ret = perform_login(
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/utils.py",
> line 171, in perform_login
> if not _has_verified_for_login(user, email) and signup:
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/allauth/account/utils.py",
> line 139, in _has_verified_for_login
> ret = EmailAddress.objects.filter(user=user, verified=True).exists()
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/query.py",
> line 808, in exists
> return self.query.has_results(using=self.db)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/query.py", line 550, in has_results
> return compiler.has_results()
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
> line 1145, in has_results
> return bool(self.execute_sql(SINGLE))
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
> line 1175, in execute_sql
> cursor.execute(sql, params)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 98, in execute
> return super().execute(sql, params)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 66, in execute
> return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 75, in _execute_with_wrappers
> return executor(sql, params, many, context)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 84, in _execute
> return self.cursor.execute(sql, params)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/utils.py",
> line 90, in __exit__
> raise dj_exc_value.with_traceback(traceback) from exc_value
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/django/db/backends/utils.py",
> line 84, in _execute
> return self.cursor.execute(sql, params)
> File "/home/kritik/empereon_django3.2/lib/python3.8/site-packages/sql_server/pyodbc/base.py",
> line 553, in execute
> return self.cursor.execute(sql, params)
> django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]An expression of
> non-boolean type specified in a context where a condition is expected,
> near ')'. (4145) (SQLExecDirectW)")
> HTTP POST /accounts/login/ 500 [1.83, 127.0.0.1:44658]
这就是我的urls.py的样子-
from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import RedirectView
from empereon.views import home, security_question, back_to_login
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required
from allauth.account.views import login
from . import views
from users.views import password_change
from .views import back_to_dashboard, handler404, handler500
from rest_framework_swagger.views import get_swagger_view
urlpatterns = [
# allauth urls.
url(r'^accounts/login', login),
]
这是我正在使用的数据库详细信息
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'db name',
'USER': 'db user',
'PASSWORD': 'password',
'HOST': 'ip',
'PORT': 'port',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'host_is_server': True,
'unicode_results': True,
'extra_params': 'tds_version=7.0'
},
}
}
它可能与不同的密码哈希方法有关吗?或者在迁移到Django 3.2后,我还需要做其他事情吗。有人能帮我弄清楚问题出在哪里吗?
[更新]我已经在下面发布了解决方案
[根本原因]
django-mssql后端仅支持django 2.2和3.0
【解决方案】
- 安装pyodbc 3.0(或更新版本(
- 安装库mssql-django
pip安装mssql-django
-
将Django应用程序或项目使用的settings.py文件中的ENGINE设置设置为'mssql':
"引擎":"mssql">