我们知道python的异步web框架sanic 的高性能,并发特性甚至接近golang, 底层使用uvloop。https://github.com/huge-success/sanic

虽然sanic写简单的web应用特别容易,但python3 异步语法和 async 需要配套相关的数据库异步库使用起来不方便,同时满足使用django等的习惯,由于目前没看见sanic有orm相关处理,以及restful 也不符合使用习惯。因此决定自定义一个:https://github.com/laoyin/easy_sanic

a、支持简单orm

b、异步pg数据库支持

c、支持restful

d、支持redis等操作

TODO:目前easy_sanic 已经支持上述,接下来将进行swagger支持。

如何安装:

pip install easy_sanic

如何使用:

在github上已经进行了easy sanic使用说明,再次进行描述,希望对sanic感兴趣的人有帮助。

easy sanic 框架,集成了sanic,同时自定义async orm, (目前支持postgres) easyrestful。简单好用,你可以完全不用掌握python3 aysncio相关知识 也能写出高性能服务。

easy sanic 目标是 快速打造微服务。

easy sanic framework.

创建项目入口:app.py

import asyncio
import opentracing
from sanic import Sanic
from aioredis import create_redis_poolfrom easy_sanic.utils.ascci_helper import init_text
from easy_sanic.utils.aio_redis import SanicRedis
from easy_sanic.db.db import ConnectionPoolfrom url import app_url  # 此处url 为之定义url文件,需要自己添加,文档有介绍如何引用app = Sanic(__name__)app.config.update({'DB_CONFIG':{'user':'postgres','password':'password','database':'','host':'','port':''}
})
redis_conf = {'REDIS':{'address': ("REDIS_HOST", "REDIS_PORT"),'db': 1,}}redis_conf['REDIS']['password'] = "REDIS_PASSWORD"app.config.update(redis_conf)@app.listener('before_server_start')
async def before_server_start(app, loop):app_url(app)# 引用urlqueue = asyncio.Queue()app.queue = queueapp.db = await ConnectionPool(loop=loop).init(app.config['DB_CONFIG'])_c = dict(loop=loop)config = app.config.get('REDIS')for key in ['address', 'db', 'password', 'ssl', 'encoding', 'minsize','maxsize', 'create_connection_timeout']:if key in config:_c.update({key: config.get(key)})_redis = await create_redis_pool(**_c)app.redis = _redisapp.conn = _redis@app.listener('before_server_stop')
async def before_server_stop(app, loop):app.redis.close()await app.redis.wait_closed()await app.service.deregister()app.queue.join()if __name__ == '__main__':print(init_text)app.run(host='0.0.0.0', port=7001)
 

如何定义url:

url:

from yourview.py import YourClass
def app_url(app):app.router.add(uri='/hello', methods=['GET'], handler=YourClass().as_views)
#yourviews.py
from sanic.response import json
from easy_sanic.restful.operation_handler import ResourceBase, operationclass RestStatus:@classmethoddef response_status(cls, ret, message, data=""):return json({"ret": ret, "message": message, "data":data})class YourClass(ResourceBase):async def get(self, request):return RestStatus.response_status(200, "ok", data=data)async def post(self, request):request_data = request.formreturn RestStatus.response_status(200, "ok", data=data)def delete(self, request):print("i am delete")return RestStatus.response_status(400, "request method error")@operation(flag=True)def custom_url(self, request):print("i am print hh")return RestStatus.response_status(400, "request method error")@operation(flag=False)def hello(self, request):print("afwefaewfaw")return RestStatus.response_status(200, "pengfeng")
现在你可以通过url 进行 get、post、delete 访问了,支持http(get、post、delete、put) 同时可以自定义方法

使用operation, flag=True 为get方法, False 为 post方法,使用如下:

http://127.0.0.1:port/hello?operation=custom_url

如何定义orm models: orm: models.py

from easy_sanic.db.orm import SqlObject, FieldObject, TableName#User message
class User(metaclass=SqlObject):id = FieldObject('id', 'varchar(200) primary key')name = FieldObject('name', 'varchar(200)')password = FieldObject('password', 'varchar(200)')table_name = TableName('users')

如何使用model orm

在view 里面

from easy_sanic.restful.operation_headler import ResourceBase, operationclass ProvilegeRole(ResourceBase):async def get(self, request):data = await User.filter(request, id='yinxingpan')new_obj = User(id="yinxingpan", name="haha2", password="123")result = await new_obj.save(request)print(data)return RestStatus.response_status(200, "ok", data=data)
其中 model.filter、model.save 必须传递request方法

目前支持postgres,redis

redis的使用:

with await request.app.conn as conn:# await conn.get("NOT_RESTRICT_URL") restricturl_status = await conn.execute('SISMEMBER', "key", "value")
部署: gunicorn app:app --bind 0.0.0.0:7001 --worker-class sanic.worker.GunicornWorker -w 2

easy_sanic更便捷实用sanic,支持orm、restful相关推荐

  1. html5制作课程表app,课程表软件哪个好用些?5款便捷实用的课程表软件推荐

    课程表软件哪个好用些?单纯想要一款课程表APP的目的除了记忆一些课程时间外,其他的都不重要,出色的课程表如果功能太多,反而成了鸡肋,但你可能需要一个更加重要的影响,那就是美观,毕竟是可能放桌面的部件. ...

  2. GMQ Wallet现代生活变得更简单、更便捷

    GMQ Wallet现代生活变得更简单.更便捷 经济在发展,时代在前进.从凭票购物到移动支付,支付方式的变迁折射出百姓生活的变化.金融科技的进步以及我们祖国在现代化建设中所取得的辉煌成就.面对席卷而来 ...

  3. 这些APP让生活更便捷

    这些APP让你生活更便捷,一起来看看吧! 软件一:Notion Notion是一款笔记软件.但它是一款特殊的笔记软件.不仅可以做笔记,还可以做任务管理,还可以用来管理wiki.功能非常独特.最近它的手 ...

  4. 基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...

    布谷飞飞劝早耕,春锄扑扑趁初晴. 千层石树通行路,一带水田放水声. <山行>-- 姚鼐 (Photo by Quang Nguyen Vinh) 农业生产作为人类最传统的产业 自古以来都讲 ...

  5. 更便捷的画决策分支图的工具_做出更好决策的3个要素

    更便捷的画决策分支图的工具 Have you ever wondered: 您是否曾经想过: How did Google dominate 92.1% of the search engine ma ...

  6. 使用说明 思迅收银系统_使用自助收银系统让消费者自助结算更便捷高效?

    很多超市的人工收银台,在客流的高峰期,如节假日.活动促销时间段.周末等,结账慢且客流量大,容易出现顾客排长队等待结账的情况.这样会有结账慢.收银员收银压力大的影响,进而影响顾客的购物体验. 在超市使用 ...

  7. 百度小程序如何引流?给用户带来了更便捷、更人性化的体验

    百度小程序如何引流?给用户带来了更便捷.更人性化的体验 百度小程序是百度官方最核心的业务,简单搜索核心词匹配,用百度APP打开,一个词只能一个人使用,如同我们的身份证一样,如果说这个词被别人使用了之后 ...

  8. 明瞳智控四月再升级,视图终端上云更便捷

    背景 明瞳智控(Intelligent Viewdata Storage)是腾讯云面向视图数据所提供的边缘接入治理.云存储及 AI 多模态分析一体化产品.依托腾讯云遍布全球的边缘视图节点和领先的 AI ...

  9. 一年中重要的节日列表 用日历便签分别记录浏览更便捷

    2022虎年正月十五元宵节已经过去,在很多人的印象里,好像只有过了正月十五十六,这个年才算是真的过完了.在这十五天的时间里,人们陆续经历了春节.情人节和元宵节三个节日,接下来还会有植树节.清明节.劳动 ...

最新文章

  1. 零基础学习Linux(三)linux与windows文件共享
  2. phpcms 指定id范围 调用_phpcms v9使用GET调用指定id文章内容、页面数据方法
  3. zigbee cc2530地址空间 layout 和flash操作
  4. 磁盘配额 挂载 和yum源的配置
  5. session实现验证码功能
  6. crc算法java_c语言的crc16算法转java
  7. exe解包和重新打包_Jira 批量提交问题 + 生成可执行文件exe
  8. 终于升级?89年的Linux内核C语言“跟上时代”转成现代C
  9. 异常:org.springframework.http.converter.HttpMessageNotReadableException
  10. c# 定义operator运算符
  11. 将Python字符串转换为Int,将Int转换为String
  12. 拓端tecdat|R语言用综合信息准则比较随机波动率(SV)模型对股票价格时间序列建模
  13. idea 包存在提示不存在
  14. Vue购物商城项目(一)
  15. 非线性系统离散线性化方法(二)
  16. 用Python筛选国考职位表
  17. 如何在WORD中插入图片自动编号,并引用图号【每天一个小技巧】
  18. 欲戴王冠,必承其重。
  19. Juniper JNCIS-ER jn0-350 148Q
  20. 用计算机pol计算方位角,卡西欧计算方位角 计算器算方位角.doc

热门文章

  1. Centos使用阿里云源
  2. 想知道PPT如何转PDF?这几个软件可以实现
  3. 三层内网渗透笔记-靶场(teamssix.com)
  4. 《系统架构设计师教程》 第一章:绪论
  5. STM32-UART串口应用
  6. 高中数学一轮复习;三角函数知识总结(提分技巧)
  7. Vs2019集成Teigha4.0
  8. 鸿蒙定时重启软件,电脑定时自动关机怎么设置?学到就是赚到,赶紧学学!
  9. 利用ubuntu对SD卡分区,生成EXT3、EXT4分区
  10. alisql mysql5.7_AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试