Константа Джанго вызывает ошибку транзакции - PullRequest
0 голосов
/ 01 ноября 2018

Я использую django 1.11, администратор может настроить, должны ли пароли быть сложными или нет, поэтому я использовал constace, чтобы включить эту конфигурацию.

settings.py

AUTH_PASSWORD_VALIDATORS = [
{
    'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    'OPTIONS': {
        'min_length': 8,
    }
},
{
    'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
{'NAME': 'apps.core.password_validators.NumberValidator', },
# {'NAME': '.apps.core.password_validators.UppercaseValidator', },
# {'NAME': '.apps.core.password_validators.LowercaseValidator', },
# {'NAME': '.apps.core.password_validators.SymbolValidator', }
]

CONSTANCE_CONFIG = {
'PASSWORD_LIFETIME': (365*25, _('The time in Days how long a Password is valid'), int),
'PASSWORD_COMPLEXITY': (True, _('When set to true the Password must contain symbols, numbers, and upper/lowercase letters.')),
'SESSION_COOKIE_AGE': (14*24*60, _('The time in minutes how long a session is valid'), int),
}

password_validation.py: из константы импорт конфиг

class NumberValidator(object):
def validate(self, password, user=None):
    is_complex = bool(config.PASSWORD_COMPLEXITY)

    if is_complex:
        if not re.findall('\d', password):
            raise ValidationError(
                _("The password must contain at least 1 digit, 0-9."),
                code='password_no_number',
            )

def get_help_text(self):
    if config.PASSWORD_COMPLEXITY:
        return _(
            "Your password must contain at least 1 digit, 0-9."
        )
    else:
        return ''

При создании нового пользователя через интерфейс администратора я получаю следующее:

текущая транзакция прервана, команды игнорируются до конца блока транзакции

Код работает, когда я удаляю часть config.PASSWORD_COMPLEXITY.

Есть идеи, почему использование константы вызывает такой тип ошибки?

Полный возврат:

Request Method: POST
Request URL: http://localhost:8001/myappuseradmin/core/user/add/

Django Version: 1.11.13
Python Version: 2.7.9
Installed Applications:
('my_app.apps.core.apps.CoreConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.postgres',
 'django_extensions',
 'djangojames',
 'django_filters',
 'rest_framework',
 'rosetta',
 'stronghold',
 'channels',
 'django_celery_results',
 'health_check',
 'health_check.db',
 'health_check.cache',
 'health_check.storage',
 'health_check.contrib.celery',
 'constance',
 'my_app.apps.bokeh_server',
 'my_app.apps.events',
 'my_app.apps.analysis',
 'my_app.apps.timeseries',
 'my_app.apps.cases',
 'my_app.apps.pec_controller',
 'my_app.apps.system',
 'my_app.apps.measurements',
 'my_app.apps.landing_page',
 'my_app.apps.opc_da_client',
 'my_app.apps.opc_ae_client',
 'my_app.apps.importexport')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'stronghold.middleware.LoginRequiredMiddleware',
 'my_app.apps.core.middleware.security_request_logging_middleware',
 'my_app.apps.core.middleware.password_expired_middleware',
 'my_app.apps.core.middleware.session_expiry_middleware')



Traceback:

File "/my_app-env/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/my_app-env/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/my_app-env/lib/python2.7/site-packages/channels/handler.py" in process_exception_by_middleware
  243.             return super(AsgiHandler, self).process_exception_by_middleware(exception, request)

File "/my_app-env/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
  551.                 return self.admin_site.admin_view(view)(*args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
  224.             return view(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
  76.             return view(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/auth/admin.py" in add_view
  103.             return self._add_view(request, form_url, extra_context)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/auth/admin.py" in _add_view
  131.                                                extra_context)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
  1508.         return self.changeform_view(request, None, form_url, extra_context)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/admin/options.py" in changeform_view
  1408.             return self._changeform_view(request, object_id, form_url, extra_context)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/admin/options.py" in _changeform_view
  1440.             if form.is_valid():

File "/my_app-env/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
  183.         return self.is_bound and not self.errors

File "/my_app-env/lib/python2.7/site-packages/django/forms/forms.py" in errors
  175.             self.full_clean()

File "/my_app-env/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  384.         self._clean_fields()

File "/my_app-env/lib/python2.7/site-packages/django/forms/forms.py" in _clean_fields
  405.                     value = getattr(self, 'clean_%s' % name)()

File "/my_app-env/lib/python2.7/site-packages/django/contrib/auth/forms.py" in clean_password2
  106.         password_validation.validate_password(self.cleaned_data.get('password2'), self.instance)

File "/my_app-env/lib/python2.7/site-packages/django/contrib/auth/password_validation.py" in validate_password
  52.             validator.validate(password, user)

File "/my_app/src/my_app/apps/core/password_validators.py" in validate
  21.         is_complex = config.PASSWORD_COMPLEXITY

File "/my_app-env/lib/python2.7/site-packages/django/utils/functional.py" in inner
  239.         return func(self._wrapped, *args)

File "/my_app-env/lib/python2.7/site-packages/constance/base.py" in __getattr__
  22.             setattr(self, key, default)

File "/my_app-env/lib/python2.7/site-packages/constance/base.py" in __setattr__
  29.         self._backend.set(key, value)

File "/my_app-env/lib/python2.7/site-packages/constance/backends/database/__init__.py" in set
  84.         old_value = self.get(key)

File "/my_app-env/lib/python2.7/site-packages/constance/backends/database/__init__.py" in get
  75.                 value = self._model._default_manager.get(key=key).value

File "/my_app-env/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/my_app-env/lib/python2.7/site-packages/django/db/models/query.py" in get
  374.         num = len(clone)

File "/my_app-env/lib/python2.7/site-packages/django/db/models/query.py" in __len__
  232.         self._fetch_all()

File "/my_app-env/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
  1118.             self._result_cache = list(self._iterable_class(self))

File "/my_app-env/lib/python2.7/site-packages/django/db/models/query.py" in __iter__
  53.         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)

File "/my_app-env/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  899.             raise original_exception

Exception Type: InternalError at /myappuseradmin/core/user/add/
Exception Value: current transaction is aborted, commands ignored until end of transaction block

1 Ответ

0 голосов
/ 06 ноября 2018

Решение проблемы заключается в следующем: Я пропустил добавление приложения «constance.backends.database» в настройку установленных приложений django.

Ошибка найти сложно. Ключ должен был проверить журналы postgres, которые показали, что таблица для константы не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...