1 所有的py文件开头都必须声明编码
#coding:utf-8
2 导入模块的顺序
#import开头的写在前面 import sys #from开头的 #from后面第一个字母相同的写在一起 层次少的写在前面 from qdutw.const import * from django.http import HttpResponse from django.shortcuts import render from django.utils.encoding import smart_str from django.views.decorators.csrf import csrf_exempt
3 等号 大于小于号等前后都要有空格
逗号后面要有空格
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 账户体系计划加上人人的OAuth 2.0认证,但是同时要注意防范风险。
http://drops.wooyun.org/papers/598
还有这个 修改和找回密码的时候可能存在的风险点