Django基础(41): 你不得不知的官方推荐编码规范

每种编程语言或框架都有自己的编码规范, 基于Python语言的Django框架也不例外。如果有一天你有幸找到了一份Django开发工作或者有一天你牛了,开发了自己的开源软件,展示你成果的最好方式就是一份优雅整洁符合编码规范的代码。今天小编我就带你来看下官方推荐的Django开发编码规范,先收藏再阅读吧!

Django基础(41): 你不得不知的官方推荐编码规范_第1张图片

Python编码规范

Django是Python语言写成的框架,所以其代码也要求符合Python的PEP8编码规范,比如永远使用4个空格做缩进,函数名用小写,类名首字母要大写。你可以使用Flake8 来辅助检测你的Python代码是否规范,使用pip安装即可。另外很多IDE比如PyCharm已自带代码检查工具,使用时还推荐使用.editorconfig文件来配置你的编码规范,比如html中使用2个空格做缩进。

值得一提的PEP8规范里每行代码字符数要求不超过79个,而Django允许每行最多119个字符, 这是GitHub代码审查时可以接受的每行代码的最大长度。

如果你有一行代码非常长,建议使用如下方式换行。括号单独成行,依然使用4个空格为每行内容做缩进:

raise AttributeError(
    'Here is a multiline error message '
    'shortened for clarity.'
)

而不是采用如下垂直对齐的方式(这是很多新手易范的错误):

raise AttributeError('Here is a multiline error message '
                     'shortened for clarity.')

第一种方式更好的原因是,当你需要改变某行文字内容时,不需要再进行手动对齐了。

另外Django对字符串推荐使用单引号,只有当字符串本身里包含单引号时才使用双引号。对于三引号docstring注释,Django推荐3个双引号,如下所示:

def test_foo():
    """
    A test docstring looks like this (#123456).
    """    

导包(import)

导包时要注意区分哪些是来未来的,哪些是python的标准库,哪些是第三方包,哪些是Django自带的标准包以及开发者自己编写的包。对于Django自带的包使用绝对路径,对于开发者自己编写的包, 使用相对路径。

另外你还需要注意最后一行导包(import)与你自己代码之间的空格距离,与一般模块代码空格一行即可,但与你的第一个函数或类必需空格两行。

示范代码如下所示:

# future
from __future__ import unicode_literals


# standard library
import json
from itertools import chain


# third-party
import bcrypt


# Django
from django.http import Http404
from django.http.response import (
    Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
    cookie,
)


# local Django
from .models import LogEntry


# try/except
try:
    import yaml
except ImportError:
    yaml = None


CONSTANT = 'foo'




class Example:
    # ...

你还可以使用isort帮你实现自动化导包顺序,使用如下命令即可:

$ python -m pip install isort >= 5.1.0
$ isort -rc .

模板样式

对于模板中的变量,遵循以下规范:

# Good
{
     { foo }}


# Bad
{
     {foo}}

视图样式

对于函数视图,第一个参数永远是request, 不要擅自修改。

# Right
def my_view(request, foo):
    # ...


# Wrong
def my_view(req, foo):
    # ...

模型样式

模型的字段应该是小写字母,可以使用下划线连接,不要使用驼峰命名。

# Good
class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)


# Bad
class Person(models.Model):
    FirstName = models.CharField(max_length=20)
    Last_Name = models.CharField(max_length=40)

模型的Meta选项应该在自定义模型字段最后,且与最后一条字段间有一空行。

class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=40)


    class Meta:
        verbose_name_plural = 'people'

有时你需要给模型定义__str__方法,重写save方法或自定义其它方法,这些方法应该放在Meta选项后面,且遵循下面的顺序:

  • 定义的模型字段

  • 定制的Manager方法

  • class Meta选项

  • def __str__()

  • def save()

  • def get_absolute_url()

  • 其它自定义方法

其它

  • 国际化时按规范标记所有需要翻译的字符串。

  • 没有用到的包或import需要移除。

  • 系统性移除代码里多余的空格等等。

Django推荐的编码规范你学到了吗? 当然最核心还是Python的PEP8编码规范,推荐大家百度一下看一看。

大江狗

2020.11.12

推荐阅读

Django基础(38): 如何设置支持多语种网站及国际化

Django基础(37): 如何获得SSL证书与配置HTTPS

谈谈cookiecutter-django生成的项目目录结构的优点

Django基础(41): 你不得不知的官方推荐编码规范_第2张图片

你可能感兴趣的:(python,django,编程语言,java,web)