一个可组合的基于sqlalchemy的restful api库。
restful-ben的Python项目详细描述
安静的本
本打了个盹,他觉得很安逸,准备出发了。
帮助创建基于SQLAlchemy、Flask和flask-restful的api的库。
功能
- 宁静的资源
- 基于sqlalchemy模型和Marshmallow模式生成post、get(individual和list)、put和delete端点。
- 查询引擎
- 字段选择
- 过滤
- 排序
- 分页
- 身份验证
- 基于用户名和密码的会话
- CSRF
- 会话终结点-登录(post)和注销(delete)
- 授权
- 基于基本角色的授权
- 角色映射到http动词(get、post等)
用法
基本API
创建模型
classCat(BaseModel):__tablename__='cats'id=Column(Integer,primary_key=True)name=Column(String,nullable=False)pattern=Column(String)age=Column(Integer)created_at=Column(DateTime,nullable=False,server_default=func.now())updated_at=Column(DateTime,nullable=False,server_default=func.now(),onupdate=func.now())
创建Marshmallow架构以将模型映射到json表示。这使用Marshmallow SQLAlchemy自动生成架构。
classCatSchema(ModelSchema):classMeta:model=Catid=field_for(Cat,'id',dump_only=True)created_at=field_for(Cat,'created_at',dump_only=True)updated_at=field_for(Cat,'updated_at',dump_only=True)cat_schema=CatSchema()cats_schema=CatSchema(many=True)
为单个cat访问创建资源,例如/cats/:id
classCatResource(RetrieveUpdateDeleteResource):single_schema=cat_schemamodel=Catsession=db.session
创建一个列出cats的资源,例如/cats
。
classCatListResource(QueryEngineMixin,CreateListResource):single_schema=cat_schemamany_schema=cats_schemamodel=Catsession=db.session
设置烧瓶应用程序:
importflaskfromflask_sqlalchemyimportSQLAlchemyfromflask_restfulimportApifrom.routesimportCatListResource,CatResourcedb=SQLAlchemy()app=flask.Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='some db'db.init_app(app)api=Api(app)withapp.app_context():db.create_all()api.add_resource(CatListResource,'/cats')api.add_resource(CatResource,'/cats/<int:instance_id>')
查询引擎
过滤
要基于相等性进行筛选,只需为一个或多个字段使用字段名和筛选值,例如/cats?pattern=Tabby
。其他操作可以通过在字段名末尾添加一个由两个下划线分隔的运算符来实现,例如/cats?pattern__contains=Tabby
。
运算符
Operator | Description | Notes / Example |
---|---|---|
eq | Equals - default | ^{ |
ne | Not Equals (!=) | ^{ |
lt | Less Than (<) | |
lte | Less Than or Equal To (<=) | |
gt | Greater Than (>) | |
gte | Greater Than or Equal To (>=) | |
contains | Contains | |
like | Like | |
ilike | Case Insensitive Like | |
notlike | Not Like | |
notilike | Case Insensitive Not Like | |
startswith | Starts With | |
endswith | Ends With | |
in | In | ^{ |
notin | Not In | ^{ |
is | IS - Helper for ^{ | ^{ |
isnot | IS NOT - Helper for ^{ | ^{ |
订购
使用$order_by
查询参数设置一个或多个字段的排序。默认情况下,字段由逗号(,)分隔并升序。按降序在字段开头添加减号。
示例
/cats?$order_by=name
/cats?$order_by=pattern,-updated_at
字段选择
使用$fields
查询参数选择字段的子集。字段用逗号(,)分隔。
示例
/cats?$fields=id
/cats?$fields=id,name
分页
使用$page
和$page_size
查询参数分页。$page_size
不是必需的,默认为100。
示例
/cats?$page=2
/cats?$page=2&$page_size=10