东半球最好用的Flask RESTful框架:SinglePage

SingePage是一个简洁强大的Python RESTful框架,基于Flask,提供GeneralView简化JSON处理。文章介绍了如何快速入门,使用RESTful URL,权限管理,过滤器和Query资源等功能。通过示例代码展示了如何处理HTTP动词,定义ORM模型,并利用框架特性进行数据操作和权限控制。SingePage还在持续发展中,以满足更多商业需求。
摘要由CSDN通过智能技术生成

Document for SingePage

GitHub
SingePage 是一个基于flask的python RESTful 框架

源代码很简单,容易修改与扩展

使用简单,提供GeneralView,完全不用管json部分

框架目前主要类,描述列表如下:

类名 用途
url 给View注册url
SinglePage 基于flask.view,提供请求分发,结果序列化功能
GeneralViewWithSQLAlchemy 基于SinglePage类的通用视图函数,能和SQLAlchemy配合快速实现接口
permission 用于视图访问权限管理,可用来实现业务逻辑

快速开始

与flask常用的基于方法的视图不同,SinglePage的常规用法是基于类

# coding: utf-8
from SinglePage import app, SinglePage
from base import Base, db_session
from sqlalchemy import Column, Integer, String, Text, Boolean, Float, DateTime, Enum

class Address(SinglePage, Base):
    pass

以上代码片段,从SinglePage导入flask实例,SinglePage类,导入数据库相关

我们的Address类继承至SinglePage,同时继承了来自SQLAlchemy的Base,这样这个类同时是视图和ORM

当然目前这份代码没有任何作用,我们继续完善它,首先定义字段

# coding: utf-8
from SinglePage import *
from SinglePage import app
from base import Base, db_session
from sqlalchemy import Column, Integer, String, Text, Boolean, Float, DateTime, Enum

class Address(SinglePage, Base):
    # 定义表字段
    __tablename__ = 'address'
    id = Column(Integer, primary_key=True)
    address = Column(String(15))

新增的代码定义了表名字,主键id,address

既然这是一个RESTful框架,那么应该能够方便的响应HTTP动词,事实上在SinglePage内部实现了请求分发,不同动词的请求会由不同的方法来响应,目前支持,PUT,GET,POST,DELETE ,四种常用的方法,他们会分别由同名但是小写的方法来响应,代码如下。

# coding: utf-8
from SinglePage import *
from SinglePage import app
from base import Base, db_session
from sqlalchemy import Column, Integer, String, Text, Boolean, Float, DateTime, Enum

class Address(SinglePage, Base):
    # 定义数据表
    __tablename__ = 'address'
    id = Column(Integer, primary_key=True)
    address = Column(String(15))

    # 处理http get方法
    def get(self):
        return db_session.query(self.object).all(), 'sqlalchemy'

    # 处理http post方法
    def post(self):
        # 获取request的json并新建一个用户
        data = request.get_json()
        address = self.object(data)
        db_session.add(address)
        db_session.commit()
        return 'ok', 'basic'

以上代码处理了GET和POST方法,当对应的请求到来时会分别由get(),post()来响应

其中get方法会把数据库中所有address表记录返回,post方法会新增一条记录

你可能注意到了,return语句很奇怪。

return db_session.query(self.object).all(), 'sqlalchemy'
return 'ok', 'basic'

第一条语句返回了查询队列和字符串‘sqlalchemy’,第二条队列返回了字符串’ok‘和字符串’basic‘

事实上SinglePage处理了动词响应方法的返回,它会将这些返回进行序列化和JSON化,由于序列化器实现的原因,必须指明带序列对象的类型,目前支持的序列化对象包括sqlalchemy的普通类,他们对应使用’sqlalchemy’和’basic’来注明,字符串,数据包装类都属于‘basic’,当然,我知道,这很不优雅。

第二个让人遗憾的地方应该是self.object,它指向类自身,注意self.object得到的不是类实例而是类本身。

所以以下代码:

data = request.get_json()
address = self.object(data)

获取来自请求中的j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值