【问题标题】:python manage.py createsuperuser works on Mac, but does not work on windowspython manage.py createsuperuser 适用于 Mac,但不适用于 windows
【发布时间】:2019-10-28 18:53:34
【问题描述】:

我一直在阅读以下链接中的 Django 教程。我已经在 Mac 上完成了这个,但是我在 Windows 10 上遇到了问题:

djangoproject

在教程第 2 部分中,创建新超级用户时失败了。

如果我在 Mac 上运行以下命令,我可以创建一个新的超级用户。当我在 Windows 上运行类似的命令时它会失败。

我尝试在 Windows 上运行以下两个:

source venv/bin/activate
python manage.py createsuperuser

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

包(pip列表):

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.

【问题讨论】:

  • 尝试卸载并重新安装 django(使用 --no-cache)
  • No module named 'django.contrib.auth.password_validation ' 位让我猜测密码验证器的设置中存在实际空格或其他一些无效字符。
  • 嗨,我尝试卸载 Django,然后使用 --no-cache 参数重新安装它,但没有解决问题。
  • 我必须承认我不确定 django.contrib.auth.password_validation 这意味着什么或如何解决它。如果有人可以提供帮助,那就太好了。谢谢
  • 您是从 Windows 复制安装到 Mac 还是在 Windows 上重新安装了 Django?

标签: django


【解决方案1】:

正如您所怀疑的那样,problem is in your password validation configuration,您使用反斜杠设置这些行延续的方式。

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"
    },
]

——也就是说,字符串文字背靠背,隐式连接它们——也是有效的,即使在我看来,可读性较差。

【讨论】:

  • 非常感谢。我添加了行继续字符,因为 pycodestyle 不断提出问题,说行太长,所以我使用了你的第二个建议。我是 Django 新手,再次感谢您的帮助。
猜你喜欢
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多