一个可组合的基于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第三方库


热门话题
构造函数的java条件调用   类Dog中的java构造函数Dog不能应用于给定类型   java jsch和运行“sudo su”   java将队列和堆栈相互复制   java如何在netbeans项目的文件夹中添加库   java While循环在我的代码中不存在   如何在XML中使用java方法的返回值   java是否可以在不写入文件的情况下将字符串/字节数组作为文件发布?   java为什么这些字符串不相等?   sockets客户机-服务器java编程,用户可选择   java如何在SpringMVC和hibernate中保存模型返回视图的列表   java如何修复组织。openqa。硒。WebDriverException:未知错误   Java,Ant错误:编码Cp1252的不可映射字符   JAVAlang.ClassCastException:[Ljava.lang.String;与java.lang.String不兼容   java如何使用JDK8(可选)为空字段创建自定义IntelliJ getter模板   java Tomcat6响应。sendRedirect()404错误