一个可组合的基于sqlalchemy的restful api库。

restful-ben的Python项目详细描述


安静的本

本打了个盹,他觉得很安逸,准备出发了。

帮助创建基于SQLAlchemyFlaskflask-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

运算符

OperatorDescriptionNotes / Example
eqEquals - default^{} or ^{}
neNot Equals (!=)^{}
ltLess Than (<)
lteLess Than or Equal To (<=)
gtGreater Than (>)
gteGreater Than or Equal To (>=)
containsContains
likeLike
ilikeCase Insensitive Like
notlikeNot Like
notilikeCase Insensitive Not Like
startswithStarts With
endswithEnds With
inIn^{}
notinNot In^{}
isIS - Helper for ^{} and ^{}/^{}^{} or ^{} or ^{}
isnotIS NOT - Helper for ^{} and ^{}/^{}^{}

订购

使用$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

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

推荐PyPI第三方库


热门话题
javascript如何从Java中的seleniun访问Chrome上的PDF查看器DOM?   如何打印字符串中的大写字母数   java使用htmlUnit处理动态html表单   java等待事件分派线程创建的GUI   java如何在屏幕上移动/动画单个子类对象而不移动其他子类?   java拟合是从PRNG到最大-最小范围的结果   java如何隐藏所有其他片段   java OpenGL ES纹理图谱失真   java排队/退队或报价/投票   java step/stp文件在另外两个点之间的距离   java如何设置水平仪栏的动画?   在Flex和Java中压缩和解压缩XML   java如何使用AutoIt安装JRE   java我想删除NavigationView布局上的一个栏   java Android Studio按钮小部件OnClick。找不到函数   java ImageView隐藏和显示   java类型的方法和构造函数未定义   swing Java UDP数据包未从客户端程序到达服务器程序   java如何在我自己的服务器上配置推送通知?