用于sqlalchemy模型的自动化restapi

flask_sandbo的Python项目详细描述


Build StatusCoverage StatusDownloadsLatest Version

砂箱是sandman’s 小弟弟。与sandman类似,烧瓶沙盘自动生成 restapi。与{TT1}$不同,它从现有的烧瓶SqLalCyy中这样做。 模型。

tl;flask sandboy博士为您的模型提供了一个restful http端点 自动地,对所有http方法都有适当的支持。需要两个人 要使用且没有依赖项的代码行。

安装

应使用pip

$ pip install flask-sandboy

用法

这是一个关于现有的烧瓶应用程序的例子{TT4} $ 烧瓶sqlalchemy型号:

fromflaskimportFlaskfrommodelsimportMachine,Cloud,dbapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///db.sqlite3'db.init_app(app)withapp.app_context():db.create_all()app.run(debug=True)

这里是自动创建restful端点的同一个应用程序 由烧瓶砂箱管理

fromflaskimportFlaskfromflask.ext.sandboyimportSandboyfrommodelsimportMachine,Cloud,dbapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///db.sqlite3'db.init_app(app)withapp.app_context():db.create_all()sandboy=Sandboy(app,db,[Cloud,Machine])app.run(debug=True)

唯一需要做的是用 你的应用,你的flask sqlalchemy对象(通常命名为db),以及 要为其创建rest端点的模型类的列表。

启动服务器并测试新的rest api:

$ http -vv -j POST localhost:5000/cloud name=first_cloud description="my first cloud"                                                                      master
POST /cloud HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 56
Content-Type: application/json;charset=utf-8
Host: localhost:5000
User-Agent: HTTPie/0.8.0

{"description": "my first cloud",
    "name": "first_cloud"}

HTTP/1.0 201 CREATED
Content-Length: 75
Content-Type: application/json
Date: Tue, 06 May 201413:57:52 GMT
Server: Werkzeug/0.9.4 Python/2.7.6

{"description": "my first cloud",
    "id": 1,
    "name": "first_cloud"}
$ http localhost:5000/cloud/1                                                                                                                                       master
HTTP/1.0 200 OK
Content-Length: 75
Content-Type: application/json
Date: Tue, 06 May 201413:53:18 GMT
Server: Werkzeug/0.9.4 Python/2.7.6

{"description": "my first cloud",
    "id": 1,
    "name": "first_cloud"}
$ http DELETE :5000/cloud/1                                                                                                                                master
HTTP/1.0 204 NO CONTENT
Content-Length: 0
Content-Type: text/html;charset=utf-8
Date: Tue, 06 May 201413:53:23 GMT
Server: Werkzeug/0.9.4 Python/2.7.6

所有常见的http方法都已实现(HEADOPTIONSGETDELETEPOSTPATCHPUT)具有正确的http状态代码。

正在验证请求

Flask Sandboy带有内置的请求验证,确保 存在将对象保存到数据库所需的字段。这是 当我们忘记包含字段时会发生什么:

$ http -j POST :5000/cloud name="bad cloud"                                                                                                          develop
HTTP/1.0 403 FORBIDDEN
Content-Length: 45
Content-Type: application/json
Date: Tue, 06 May 201414:05:52 GMT
Server: Werkzeug/0.9.4 Python/2.7.6

{"message": "cloud.description required"}

待办事项

我会把它留给问题选项卡来跟踪。

发布历史记录

0.0.3

  • 各种错误修复
  • 100%测试覆盖率
  • 文档

0.0.2

  • 各种错误修复

0.0.1

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中不同http客户端超时时间单位的重要性   java数据[i++]=data[i++]*2结果令我惊讶   java Quartz在使用spring的hibernate中执行事务时发生异常   java如何将我的对象传递给另一个类   java嵌套布局奇怪的问题   当使用javax时,有一种方法可以通过策略定义自定义订单。坚持不懈OrderBy注释?   xml Java DOM getElementByID   java使用intent将视图列表传递给另一个片段   带构造函数的Java枚举。通过构造函数参数获取值的最佳方法   java为什么不在单线程中执行此通量?   如何将JavaScript字符串传递给Nashorn引擎而不是Java字符串?   java二进制XML文件行#17:膨胀类片段时出错   java如何使用Seekbar值作为int变量?   java我想从数据存储中进行选择,但它不起作用   java如何处理幻灯片中的多分辨率图像?   java这意味着什么?类型不匹配:无法从列表<对象和可比<?>&可序列化>以列出<对象>“   java我如何让这个猜谜游戏发挥作用?   java将ZipInputStream传递给DocumentBuilder。parse()   java后添加maven依赖项,org。阿帕奇。卡塔琳娜。过滤器。当前错误消息   java有没有一种方法可以使用安卓通过按下便利键触发方法?