小言_互联网的博客

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

420人阅读  评论(0)

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

Python编码规范

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

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

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


   
  1. raise AttributeError(
  2. 'Here is a multiline error message '
  3. 'shortened for clarity.'
  4. )

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


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

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

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


   
  1. def test_foo():
  2. """
  3. A test docstring looks like this (#123456).
  4.     """    

导包(import)

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

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

示范代码如下所示:


   
  1. # future
  2. from __future__ import unicode_literals
  3. # standard library
  4. import json
  5. from itertools import chain
  6. # third-party
  7. import bcrypt
  8. # Django
  9. from django.http import Http404
  10. from django.http.response import (
  11. Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
  12. cookie,
  13. )
  14. # local Django
  15. from .models import LogEntry
  16. # try/except
  17. try:
  18. import yaml
  19. except ImportError:
  20. yaml = None
  21. CONSTANT = 'foo'
  22. class Example:
  23. # ...

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


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

模板样式

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


   
  1. # Good
  2. {{ foo }}
  3. # Bad
  4. {{ foo}}

视图样式

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


   
  1. # Right
  2. def my_view(request, foo):
  3. # ...
  4. # Wrong
  5. def my_view(req, foo):
  6. # ...

模型样式

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


   
  1. # Good
  2. class Person(models.Model):
  3. first_name = models.CharField(max_length= 20)
  4. last_name = models.CharField(max_length= 40)
  5. # Bad
  6. class Person(models.Model):
  7. FirstName = models.CharField(max_length= 20)
  8. Last_Name = models.CharField(max_length= 40)

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


   
  1. class Person(models.Model):
  2. first_name = models.CharField(max_length= 20)
  3. last_name = models.CharField(max_length= 40)
  4. class Meta:
  5.         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生成的项目目录结构的优点


转载:https://blog.csdn.net/weixin_42134789/article/details/109664613
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场