【问题标题】:How to format Django setting file for flake8如何为 flake8 格式化 Django 设置文件
【发布时间】:2017-09-22 04:28:54
【问题描述】:

我有点痴迷于用 flake8 格式化我的 python 代码。但是,我在 Django 的设置文件中找不到解决 E501(行太长 x > 79 个字符)的好方法。

最初是这样的(4xE501):

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

'NAME':django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 仍然太长。有没有办法格式化这个或者我应该忽略这个?

【问题讨论】:

  • 你应该忽略它。对造型问题的痴迷是,嗯……只是痴迷。 (您可以定义一个添加前缀的函数,但正如我所说.. 痴迷:-)
  • 您可以在长行末尾添加注释 # nopep8 以将其从 pep8 检查中排除 - stackoverflow.com/a/30247961/2240489

标签: python django pep8 flake8


【解决方案1】:

如果您沉迷于没有收到此警告而不是代码的实际外观,那么您可以通过在断点处添加 \ 字符来中断一行 python 代码(而不破坏其连续性):

例子:

# 1
from some_module import some_method, some_other_method, \
                        a_third_method

# 2
s = "A really very long string, which exist to mesh with your pep8" \
    " warning free obsession. Well, not anymore!!!"    

注意:当您要拆分的行在{}, [] or () 内时,\ 字符会引发错误,因此您可以这样做:

AUTH_PASSWORD_VALIDATORS = [{
    'NAME': 'django.contrib.auth.password_validation.'
            'UserAttributeSimilarityValidator'
    }, ...

考虑到这并不是那么丑陋......


如果您不想要警告并且喜欢您的代码,那么您可以添加:

# nopep8 

在您希望免除 pep8 分析的每一行的末尾。

【讨论】:

  • 很高兴帮助队友:)
  • 你的字符串是pep8warning而不是pep8 warning。我想这说明了为什么对造型的痴迷不是一件好事。 ;)
  • 确实@allcaps :D 我已经修复了它(痴迷地)!
【解决方案2】:

作为替代方案(以下重写通过 PEP8):

[{"NAME": f"django.contrib.auth.password_validation.{name}"}
 for name in [
    "UserAttributeSimilarityValidator",
    "MinimumLengthValidator",
    "CommonPasswordValidator",
    "NumericPasswordValidator"]]

在 python 2 中,您可以使用 {}".format(name) 而不是 f""

【讨论】:

  • 太干燥了,生活在沙漠里!
【解决方案3】:

正在查看Coding style | Django docs 并发现了这个:

PEP 8 的一个例外是我们的行长规则。如果这意味着代码看起来更难看或更难阅读,请不要将代码行限制为 79 个字符。我们最多允许 119 个字符,因为这是 GitHub 代码审查的宽度。

即使是 Django 的人也避免使用它(他们也更喜欢 flake8 来检查 PEP8)。因此,最好创建一个.flake8setup.cfg 文件并输入:

[flake8]
max-line-length = 119

【讨论】:

    【解决方案4】:

    如果你使用的是 VS Code....

    1) 在您的项目中创建文件夹 (.vscode)。

    2) 在文件夹 (.vscode) 中创建settings.json 文件并粘贴此代码

    {
        "team.showWelcomeMessage": false,
        "editor.formatOnSave": true,
        "python.linting.pycodestyleEnabled": false,
        "python.linting.pylintPath": "C:Users/User/AppData/Roaming/Python/Python37/site-packages/pylint",
        "python.linting.pylintArgs": [
            "--load-plugins",
            "pylint_django"
        ],
        "python.linting.pylintEnabled": false,
        "python.linting.enabled": true
    }
    
    where "python.linting.pycodestyleEnabled": false, (do FALSE)
    
    

    【讨论】:

      猜你喜欢
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多