python编码规范

article/2025/10/14 17:31:37

PE8基本规范:

建议修改在使用的 IDE 中修改 PEP8 的每行字数不超79字符规范,可修改为 Django 建议的 119 字符

一、python编码规范:

(一)代码编码:

1、国际惯例,文件编码和 Python 编码格式全部为 utf-8 ,例如:在 Python 代码的开头,要统一加上 # -- coding: utf-8 --。
2、Python 代码中,非 ascii 字符的字符串,请需添加u前缀
3、若出现 Python编 码问题,可按照以下操作尝试解决:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

(二)命名规范:
1、包名、模块名、局部变量名、函数名

  全小写+下划线式驼峰 示例:this_is_var

2、全局变量

全大写+下划线式驼峰 示例:GLOBAL_VAR

3、类名

首字母大写式驼峰 示例:ClassName()

4、变量名命名

尽量体现变量的数据类型和具体意义

注:

变量名、类名取名必须有意义,严禁用单字母
变量名不要用系统关键字,如 dir type str等等

建议:

bool变量一般加上前缀 is_ 如:is_success

(三)、import 顺序:

1、标准库   2、第三方库  3、项目本身
(之间用空行分隔)

(四)、models 内部定义顺序:

All database fields
Custom manager attributes
class Meta
def (str)
def save()
def get_absolute_url()
Any custom methods

(五)、异常捕获处理原则:

尽量只包含容易出错的位置,不要把整个函数 try catch
对于不会出现问题的代码,就不要再用 try catch了
只捕获有意义,能显示处理的异常
能通过代码逻辑处理的部分,就不要用 try catch
异常忽略,一般情况下异常需要被捕获并处理,但有些情况下异常可被忽略,只需要用 log 记录即可,可参考一下代码:

def ignored():try:yieldexcept Exceptions as e:logger.warning(e)pass

(六)、return early原则

提前判断并 return,减少代码层级,增强代码可读性(简单逻辑往前放)

if not condition:return
# a lot if code

(七)、Fat model, thin view

逻辑代码和业务代码解耦分离,功能性函数以及对数据库的操作定义写在 models 里面,业务逻辑写在 view 里面。

(八)、权限校验装饰器异常抛出问题

建议权限不足时直接抛出异常,可以使用 django 自带的:

from django.core.exceptions import PermissionDenied

权限不足时抛出异常 PermissionDenied,之后应该返回什么样的页面由 handler 或者中间件去处理

(九)、分 method 获取 request 参数问题

一般可以分method 获取request参数,这样能够使代码更可读,且之后修改 method 时不必每个参数都修改

args = request.GET if request.method == "GET" else request.POST
business_name = args.get('business_name', '')
template_name = args.get('template_name', '')

(十)、使用数字、常量表示状态

两种的话改为 true/false,多种改为 enum 可读性更好

def enum(**enums):return type("Enum", (), enums)StatusEnum = enum(SUCCESS=True,FAIL=False,
)

(十一)、其他注意问题

1、【必须】去除代码中的 print,否则导致正式和测试环境 uwsgi 输出大量信息
2、逻辑块空行分隔
3、变量和其使用尽量放到一起
4、【必须】 import过长,要放在多行的时候,使用 from xxx import(a, b, c),不要用 \ 换行
5、Django Model 定义的 choices 直接在定义在类里面

二、前端编码规范:

(一):命名规则

1、类的基础命名方式:“项目英文简写-当前页-页面内容块”如 .ijobs-index-box。
2、Id 的基础命名方式:语义化,并使用下滑杠连接,如步骤名称可命名为 #step_name
3、Javascript 变量命名方式:按照变量类型的首个字母为前缀,使用驼峰命名法;
例子:

var aName = ['zhangsan','lizi','zhaowu'];  //Array 数组
var oBtn = window.document.getElementById('btn');  //Object 对象
function fnName(){};  //Function 函数
var nAge = 25;  //Integer(int) 整型
var sWebURL="www.wangyingran.com";  //String 字符串

三、日志规范:

(一)日志输出级别:1、Error:系统异常,影响用户使用,必须通知到开发者及时修复。
2、Warning:系统异常,不影响用户使用,但有异常需要跟进修复。
3、Info:系统流水日志或日常记录,不做通知配置。

(二)、日志输出格式:

1、日志需要包含当前函数名,方便查找和定位。
2、重要操作流水直接记录数据库,可以保存较长时间。
3、错误日志要方便定位问题,建议记录当前参数以及上下文变量。

四、代码提交规范

每次代码提交必须有备注说明,注明本次提交做了哪些修改
commit 分类:

bugfix: -------- 线上功能 bug
sprintfix: ----- 未上线代码修改 (功能模块未上线部分bug)
minor: --------- 不重要的修改(换行,拼写错误等)
feature: ----- 新功能说明

五、接口规范

Api 的 method:

Api 的 method,要根据实际请求的类型,查询一定要用 get,不能随意指定 method。
具体可以参考文档 《RESTful Web Services Cookbook-cn.pdf》 。

接口返回内容

接口返回内容开发建议直接参考蓝鲸 apigateway 规范,返回的内容中包含 result code data message request_id 这几个字段
在这里插入图片描述
接口返回Status Code

**建议充分利用 HTTP Status Code 作为响应结果的基本状态码,基本状态码不能区分的 status,
再用响应 body 中"约定"的 code 进行补充http状态码详细说明请参考: https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81**

在这里插入图片描述

接口数据验证

数据检验逻辑"应当"和业务逻辑分离,这样做的好处:

代码逻辑更加清晰
数据校验逻辑(可能)可以复用

分离方案:

1)form-data/url-params:Django-Form 
2)Json:Json-schema

代码注释

Python 代码注释
方法必须使用标注注释,如果是公有方法或对外提供的 API 相关方法,则最好给出使用样例。如:
在这里插入图片描述
Module注释:在开头要加入对该模块的注释。如:
在这里插入图片描述
普通代码注释应该以‘#’和单个空格开始。

如果有需要调整或者需要优化的地方,可以使用 #TODO 这里是注释内容”进行注释,

格式:'#'+单个空格+'TODO'+单个空格+注释内容。

方法的返回,如果数据结构比较复杂,则必须要对返回结果的每个属性做解释。

前端代码注释

Html 注释:

<!-- 容器 -->
<div class=“container”>
...
<!-- 用户名 -->
<div id=“user_name”>
...
</div>
<!-- /用户名 -->
...
</div>
<!-- /容器 -->

css 注释
内容比较少是可以只在顶部加注释,内容比较多时在尾部加结束标签/* 注释内容 end */

/* 新建任务 start */
.new-task{}
/* 新建任务名 */
.task-name{color:#333;}
/* 新建任务时间 */
.task-created-time{background:url(img/clock.png) no-repeat;}
/* 新建任务 end */

Js 注释
Js注释同上,函数如果有参数,建议简单备注一下参数的内容和类型。

文件或包的引用

Python 代码:
模块或包的引入最好使用完整路径,即使是同一个包下的相互引用,也建议使用完整路径。
这样比较方便代码阅读,同时若后续需修改为相对路径也很简单。

前端页面:
在页面中引用 css 和 js、或配置 url 路径时,必须使用“绝对路径”,而不要使用‘…/’,‘./’等相对路径的引用方式


http://chatgpt.dhexx.cn/article/dbOxd5NG.shtml

相关文章

JAVA编码规范

命名风格 代码命名不能以下划线或者美元符号开头或者结尾代码命名不能以中文拼音或者中文拼音与英文混合方式类名使用UpperCamCamelCase风格&#xff0c;但DO、PO、DTO、VO、BO等除外方法名、参数名、变量名统一使用lowerCamelCase&#xff0c;必须遵守驼峰命名常量名全部大写…

【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity精品学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作分享 &…

编码的一些基本规范

1. 数据库表设计 Rule 1. 【强制】表名小写&#xff0c;多个word之间用英文下横线_分隔Rule 2. 【强制】表名普通表前缀t_;临时表tmp_;备份表bak_;视图v_;主键pk_;外键fk_;唯一索引uix_;普通索引idx_Rule 3. 【强制】关系表统一用relation结尾Rule 4. 【强制】表名和业务字段必…

编码规范汇总【持续更新】

目录 前言规范标准C规范C#规范 规范记录命名硬编码单例类【线程安全】Qt定义类【隐式内存共享】 前言 作为软件工程师&#xff0c;出产物就应该具备工程的健壮性和美观性。因此代码规范是作为软件工程师的职业素养。但总所周知&#xff0c;程序员的工作基本就是在维护一座屎山…

51单片机串口波特率

SCON SCON 0X50工作方式1 波特率需要使用定时器1 波特率 ((2^SMOD)/32) * (定时器溢出率) 定时器溢出率 系统时钟/指令周期/装载数 SMOD 1 &#xff0c;波特率加倍 TH1 TL1 -(FOSC / INSTRU_CYCLE / 32 / BAUD); //Set auto-reload vaule TR1 1;

关于51单片机串口1发送完整的数据包

关于51单片机串口1发送完整的数据包 在参考这样的协议的条件下我们想发送一套完整的数据包该如何发送呢&#xff1f;可以设计这样的程序。 1. 串行口1接收特定包头数据包函数。 参数: Uart_Rec_Data&#xff1a;串口接收到的数据 &#xff1b; USER_Get_DataPacket: 数据存储目…

51单片机串口收发

#include<reg52.h>#define uint unsigned int #define uchar unsigned char/*本代码实现串口的收发功能&#xff0c;PC发送什么单片机就接收什么&#xff0c; 然后单片机又把接收的发出去&#xff0c;本次编写了在发送单个字符串 函数上添加了字符串函数&#xff0c;方便…

学习51单片机串口工作方式及应用

1.串口控制寄存器SCON SM2:多机通信控制位 REN:允许接收控制位 TB8:发送第九位数据 RB8:接收第九位数据 TI:发送中断标志位 RI:接收中断标志位 2.电源控制寄存器PCON 当SMOD位为1&#xff0c;则串行口方式1、方式2、方式3的波特率加倍。 3.串口的工作方式 &#xff08;1…

关于51单片机串口通信的相关知识(寄存器)

一、51单片机串口概念 1、51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口&#xff0c;具有UART&#xff08;通用异步收发器&#xff09;的全部功能。 2、51单片机的硬件连接 简单双向串口通信有两根数据通信线&#xff1a; 发送端TXD&#xff08;Transmit Da…

C51单片机串口点亮一个led

C51单片机串口点亮一个led 因为最近要用到51的串口做一些通信&#xff0c;这里写一个点led的程序记录一下。 说是一个led&#xff0c;其实可以随意多个。 主要使用到的东西&#xff1a; STC89C52芯片&#xff0c;USB转TTL下载器&#xff0c;led灯若干&#xff0c;面包板&am…

51单片机 串口

串口说白了&#xff0c;就是初始化后&#xff0c;用中断接收发送字符而已。 TXD 是 80C51 单片机的P3.1口&#xff0c;RXD 是80C51 单片机的 P3.0口 T1 溢出率 是定时器1的溢出率 &#xff0c;SMOD是发送速率倍频的16分频&#xff0c;T1每溢出一次发送一位&#xff0c;每次发送…

【记录】一次51单片机串口乱码问题排查

【记录】一次51单片机串口乱码问题排查 项目场景问题描述原因分析解决方案结语 项目场景 在51串口收发仿真实验中使用两个单片机互相通信&#xff0c;程序设定A上电1s后通过串口以16进制给B发送AA,直到B收到AA后回复BB&#xff0c;当A机确认收到AA后开始发送数据&#xff0c;若…

## 51单片机串口通讯

1&#xff0c;接线方式&#xff1a; RXD: 数据输入引脚&#xff1b;对应stc89的P3.0口&#xff1b; TXD&#xff1a;数据的发送端口;对应P3.1口&#xff1b; 注意&#xff1a;单片机的的串口TX&#xff0c;RX与外设交叉接线&#xff1b; 2串口编程要素 输出/输入数据缓冲器S…

51单片机串口通信详解

文章目录 前言一、计算机通信简介二、串口通信简介1、简介2、同步通信和异步通信2.1 同步通信2.2 异步通信 3、串行通信的传输方式4、串口通信硬件电路5、常见接口介绍 三、串口相关寄存器详解1、特殊功能寄存器SCON2、PCON寄存器3、TMOD寄存器&#xff08;定时器工作方式寄存器…

51单片机串口接收处理

目的: 通过51单片机串口外设功能&#xff0c;来对一组数据进行处理&#xff0c;新手刚刚入门可能会将串口接收到的一个数据直接赋值给一个变量&#xff0c;然后用这个变量做相应功能&#xff0c;可是这样写的不稳定性太高了&#xff0c;有可能会接收不到你要的那个数据&#…

51单片机串口通信原理

计算机串行通信基础 通信有串行通信和并行通信两种方式 串行通信&#xff1a; 将数据字节分为一位一位的形式在一条数据线上逐个传送。如下图所示 串行通信特点&#xff1a;传输线少&#xff0c;长距离传送时成本低&#xff0c;且可以利用电话网等现成设备&#xff0c;但数据的…

51单片机串口点灯

#include "reg52.h" #include "intrins.h" sfr AUXR 0x8e; sbit D5 P3^7; //定义led 接在P3.7void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //配置串口工作方式1&#xff0c;RE使能接收数据 0101 0000PCON 0x00; TMOD &0x0F;TMOD |0x2…

51单片机串口使用

文章目录 前言一、串口概念二、中断中的RI、TI和SUBF1.RI2.TI3.SUBF 三、串口波特率的计算四、代码的编写总结 前言 今天将为大家讲解51单片机的串口原理及代码编写。 一、串口概念 51单片机串口是一种通信接口&#xff0c;它可以将51单片机与外部设备连接起来&#xff0c;实…

51单片机串口通信

串口通信 1、通信的基本概念2、 51单片机串口介绍2.1、串口通信简介2.2、串口内部结构2.3、串口通信寄存器SCONPCON 2.4、串口工作方式 3、串口使用方法3.1、硬件3.2、通信协议RS2323.3、串口初始化 4、硬件设计5、 软件设计6、拓展 串口的通信&#xff0c;一般是检测通信模块是…

UART串口通信

什么是串行通信? 将数据字节分成一位一位的形式在一条传输线上逐位地发送。 优点:成本低,控制复杂。 什么是异步通信? 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两…