python编码规范

1 所有的py文件开头都必须声明编码

#coding:utf-8

2 导入模块

#import开头的写在前面
import sys
#然后是from开头的
#from后面第一个字母相同的写在一起  层次少的写在前面from django.utils.encoding import smart_str
from django.views.decorators.csrf import csrf_exempt
#最后才是本地模块
from .models import Student

导入多个模块的时候,如果需要换行,就要加括号

3 等号 大于小于号等前后都要有空格,但是括号中的参数等号就不用前后空格,例如

user = auth.authenticate(username=user_name, password=password)

  逗号后面要有空格

xmlstr = smart_str(request.body)
        xml = etree.fromstring(xmlstr)
        MsgType = xml.find('MsgType').text
        FromUserName = xml.find('FromUserName').text
        #暂时只支持文本消息的获取 而且各种消息的xml结构不一样  先判断消息类型
        if MsgType == 'text':
            statistics('message_received')
            CreateTime = xml.find('CreateTime').text
            Content = xml.find('Content').text
            MsgId = xml.find('MsgId').text
            #处理微信消息
            return HttpResponse(auto_reply(FromUserName, Content, MsgType))
        elif MsgType == 'event':
            event = xml.find('Event').text
            #用户关注事件
            if event == 'subscribe':
                statistics('subscribe')
                return HttpResponse(auto_reply(FromUserName, "用户关注事件", 'text'))
            else:
                statistics('unsubscribe')
        else:
            #不支持的消息类型
            return HttpResponse(auto_reply(FromUserName, '不支持的消息类型', 'text'))

4 一般只使用双引号

   单行注释使用#开头的,放在要注释的语句上面。

   多行注释如果是用来说明这个函数的,应放在def ***():下一行

5 一般一个函数不要写的太长 适当的去拆分成函数和模块 尤其是一个函数实现了两个功能或者判断了几个不相关的情况然后处理的。

6 注意代码漏洞

  有的功能限制权限,比如加上@login_required() 

  

@login_required(login_url='teacher')
@is_teacher(redirect_url='')
def delete_experiment(request, experiment_id):
    try:
        experiment = Experiment.objects.get(id=experiment_id, 
                                            lesson__teacher=request.user)
    except Experiment.DoesNotExist:
        raise Http404
    experiment.delete()
    response = {"status_phrase": "ok", "lesson_id": experiment.lesson_id}
    return HttpResponse(simplejson.dumps(response))

这个也必须判断lesson_teacher是不是当前登录的用户,如果没有这一句就可能造成平行权限漏洞。

7 类里面每个函数体之间空两行  导入模块的语句与下面空两行

from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser


#管理类
class PassportManager(BaseUserManager):
    #创建user
    def create_user(self, email, user_name, password=None):
        if not email:
            raise ValueError('Users must have an email address')
 
        user = self.model(
            email=PassportManager.normalize_email(email),
            user_name=user_name,
        )
 
        user.set_password(password)
        user.save(using=self._db)
        return user

8 在django里面接收的外部参数比如get或者post提交的数据需要进行长度和类型检测。

9 django里面数据库的主键默认为int,但是如果使用直接提交的数据一般都是字符串型的。注意~

原文地址:https://www.cnblogs.com/virusdefender/p/3511518.html