Package: lesscode-py
lesscode-python介绍lesscode-python 是基于tornado的web开发脚手架项目，该项目初衷为简化开发过程，让研发人员更加关注业务。软件功能路由自动注册，路由直接指向处理函数请求参数自动解析，调用处理函数自动注入多环境配置文件，支持命令行指定运行参数日志本地化存储，支持日志控制台与文件双输出，存储参数可配置统一异常处理，日志格式统一统一数据返回格式，自动包装处理定义常用业务处理状态码，支持信息自定义支持数据库连接池，支持多数据源统一配置，目前已支持PostgreSQL。安装教程安装或升级到最新版本，请执行以下操作:pip install -U lesscode-py使用说明路由自动注册，路由直接指向处理函数请求参数自动解析，调用处理函数自动注入建立Handler处理类，继承BaseHandler使用 @Handler 标注一级路径编写业务处理方法，使用@GetMapping/PostMapping进行标注二级路径请求时使用两级路径拼接访问如：/level1/level2@Handler("/level1")
class DemoHandler(BaseHandler):@GetMapping("/level2")
def query_demo(self):
return "lesscode-python"注意：所有Handler处理类需要放在统一文件目录下，默认为"handlers"， 如需修改在配置文件中进行设置定义：define("handler_path", default="handlers", type=str, help="处理器文件存储路径")
  配置：options.handler_path ="xxx"多环境配置文件，支持命令行指定运行参数config.py 默认配置文件config_dev.py 开发环境配置文件config_release.py 准生产环境配置文件config_prod.py 生产环境配置文件注意：所有配置文件需要统一放置在项目根目录下的profile文件夹中，需要自行创建，不支持自定义相同参数默认配置文件会覆盖定义默认值，其他环境配置文件会覆盖默认配置文件，命令行会覆盖配置文件优先级：命令行>环境配置文件>默认配置文件>定义默认值定义：define("profile", default="profiles.config", type=str, help="配置文件")配置1：在默认配置文件中指定：options.profile ="dev" 仅需要指定后缀即可配置2：在命令行指定：--profile=dev日志本地化存储，支持日志控制台与文件双输出，存储参数可配置日志级别设置CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET10-DEBUG       输出详细的运行情况，主要用于调试。20-INFO        确认一切按预期运行，一般用于输出重要运行情况。30-WARNING     系统运行时出现未知的事情（如：警告内存空间不足），但是软件还可以继续运行，可能以后运行时会出现问题。40-ERROR       系统运行时发生了错误，但是还可以继续运行。50-CRITICAL    一个严重的错误，表明程序本身可能无法继续运行。配置：options.logging = "INFO"文件分割方式时间与文件大小，默认采用时间分割time/size配置：options.log_rotate_mode = "time"日志文件前缀配置：options.log_file_prefix = "log"间隔的时间单位S 秒
M 分
H 小时、
D 天、
W 每星期（interval==0时代表星期一）
midnight 每天凌晨配置：options.log_rotate_when = "D"备份文件的个数如果超过这个个数，就会自动删除配置：options.log_file_num_backups = 30统一异常处理，日志格式统一业务中需要抛出异常，直接抛出BusinessException抛出设定状态码异常
  raise BusinessException(StatusCode.USER_REGISTER_FAIL）
抛出设定状态码异常，需要内容格式化,此类异常码为方法，调用时传入提示词
   raise BusinessException(StatusCode.REQUIRED_PARAM_IS_EMPTY(message))统一数据返回格式，自动包装处理ResponseResult  响应结果的统一包装类业务请求状态编码self["status"] = status_code[0]
 # 返回状态码对应的说明信息
 self["message"] = status_code[1]
 # 返回数据对象 主对象 指定类型
 self["data"] = data
 # 时间戳
 self["timestamp"] = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')

 #### 响应格式

   {
         "status": "00000",
         "message": "请求成功",
         "data": "lesscode-python",
         "timestamp": "2021-11-18 16:20:07.823522"
    }定义常用业务处理状态码，支持信息自定义StatusCode 统一请求返回状态码A表示错误来源于用户，比如参数错误，用户安装版本过低，用户支付超时等问题；B表示错误来源于当前系统，往往是业务逻辑出错，或程序健壮性差等问题；C表示错误来源于第三方服务响应服务请求的状态码与说明SUCCESS = ("00000", "请求成功")
FAIL = ("99999", "请求失败")
USER_VALIDATE_FAIL = ("A0001", "用户端错误")
USER_REGISTER_FAIL = ("A0100", "用户注册错误")
USER_NAME_VALIDATE_FAIL = ("A0110", "用户名校验失败")
USER_NAME_EXIST = ("A0111", "用户名已存在")
USER_NAME_INVALID = ("A0112", "用户名包含特殊字符")
PASSWORD_VALIDATE_FAIL = ("A0120", "密码校验失败")
PASSWORD_LENGTH_VALID = ("A0121", "密码长度不够")
SHORT_MESSAGE_VALID_FAIL = ("A0130", "短信验证码错误")
VALIDATE_CODE_ERROR = ("A0131", "验证码错误！")
USER_LOGIN_EXCEPTION = ("A0200", "用户登陆异常")
USER_ACCOUNT_NOT_EXIST = ("A0201", "用户账户不存在")
REQUEST_PARAM_ERROR = ("A0300", "用户请求参数错误")
INVALID_USER_INPUT = ("A0301", "无效的用户输入")
REQUIRED_PARAM_IS_EMPTY = ("A0310", "请求缺少必要参数:{}")
INVALID_TIME_STAMP = ("A0311", "非法的时间戳参数")
USER_INPUT_INVALID = ("A0312", "用户输入内容非法")
VALIDATE_CODE_EXPIRE = ("A0400", "验证码过期")
FORM_VALIDATE_FAIL = ("A0401", "表单校验失败")
PARAM_VALIDATE_FAIL = ("A0402", "参数校验失败")
PARAM_BIND_FAIL = ("A0403", "参数绑定失败")
PHONE_NUM_NOT_FOUND = ("A0404", "找不到该用户，手机号码有误")
PHONE_ALREADY_REGISTER = ("A0405", "手机号已经注册")
ACCESS_DENIED = ("B0001", "访问权限不足")
RESOURCE_DISABLED = ("B0002", "资源被禁用")
RESOURCE_NO_AUTHORITY = ("B0003", "该资源未定义访问权限")
BUSINESS_FAIL = ("B0000", "{}")
RESOURCE_NOT_FOUND = ("B0404", "访问资源不存在")
TIMEOUT = ("B0100", "系统执行超时")
STRIKE_RECOVERY = ("B0200", "系统容灾系统被触发")
RPC_INVOKE_ERROR = ("C0001", "调用第三方服务出错")
SERVER_ERROR = ("C0002", "服务器内部错误")
UNKNOWN_ERROR = ("C0003", "未知异常")参与贡献Fork 本仓库新建 Feat_xxx 分支提交代码新建 Pull Request未来规划数据访问层封装数据缓存控制统一权限处理API 接口文档生成注册中心集成......