python manage.py создает суперпользователь работает на Mac, но не работает на Windows - PullRequest
0 голосов
/ 27 октября 2019

Я прошел учебник по Django по следующей ссылке. Я выполнил это на Mac, однако у меня возникают проблемы с Windows 10:

djangoproject

В учебном пособии, часть 2, когда речь идет о создании нового суперпользователя,не получается.

Если я запусту на Mac следующее, я смогу создать нового суперпользователя. Сбой при запуске аналогичной команды в Windows.

Я попытался запустить в Windows оба следующих компонента:

source venv/bin/activate
python manage.py createsuperuser

и

.\venv\Scripts\activate
py manage.py createsuperuser

Package (piplist):

Package     Version
----------- -------
Django      2.2.6
docutils    0.15.2
pip         19.3.1
pycodestyle 2.5.0
pytz        2019.3
setuptools  41.4.0
sqlparse    0.3.0
wheel       0.33.6

База данных db.sqlite3 присутствует, и, насколько я могу судить, имеет разумную структуру (существует множество таблиц, специфичных для Django).

Я ожидаю, чтосоздайте нового суперпользователя, но вместо этого получите этот вывод:

Traceback (most recent call last):
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\password_validation.py", line 26, in get_password_validators
    klass = import_string(validator['NAME'])
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\utils\module_loading.py", line 17, in import_string
    module = import_module(module_path)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'django.contrib.auth.password_validation                '

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 61, in execute
    return super().execute(*args, **options)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\management\commands\createsuperuser.py", line 132, in handle
    validate_password(password2, self.UserModel(**fake_user_data))
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\password_validation.py", line 44, in validate_password
    password_validators = get_default_password_validators()
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\password_validation.py", line 19, in get_default_password_validators
    return get_password_validators(settings.AUTH_PASSWORD_VALIDATORS)
  File "C:\Users\Mark\Documents\Development\Python\PYTHON---DJANGO---TUTORIAL\venv\lib\site-packages\django\contrib\auth\password_validation.py", line 29, in get_password_validators
    raise ImproperlyConfigured(msg % validator['NAME'])
django.core.exceptions.ImproperlyConfigured: The module in NAME could not be imported: django.contrib.auth.password_validation                .UserAttributeSimilarityValidator. Check your AUTH_PASSWORD_VALIDATORS setting.

1 Ответ

0 голосов
/ 28 октября 2019

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

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation\
                .UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation\
                .MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation\
                .CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation\
                .NumericPasswordValidator',
    },
]

оценивается как

[
{'NAME': 'django.contrib.auth.password_validation                .UserAttributeSimilarityValidator'}, 
{'NAME': 'django.contrib.auth.password_validation                .MinimumLengthValidator'}, 
{'NAME': 'django.contrib.auth.password_validation                .CommonPasswordValidator'}, 
{'NAME': 'django.contrib.auth.password_validation                .NumericPasswordValidator'}
]

и такого модуля как django/contrib/auth/password_validation .py.

нет. Если тот же код работает в macOS, тогда ... хорошо, странно, это может быть нормализацией имени файла, но все же, это проблема.

Исправление, естественно, состоит в том, чтобы изменить это значение на

AUTH_PASSWORD_VALIDATORS = [
    {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, 
    {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, 
    {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, 
    {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
]

или, если вы хотите получить эти продолжения строки,

AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation."
        "UserAttributeSimilarityValidator"
    },
    {
        "NAME": "django.contrib.auth.password_validation."
        "MinimumLengthValidator"
    },
    {
        "NAME": "django.contrib.auth.password_validation."
        "CommonPasswordValidator"
    },
    {
        "NAME": "django.contrib.auth.password_validation."
        "NumericPasswordValidator"
    },
]

- то естьстроковые литералы вплотную, неявно объединяя их, - также допустимо, даже если, на мой взгляд, менее читабельно.

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