zoukankan      html  css  js  c++  java
  • 七月小说网 Python + GraphQL (三)

    概述

    后台数据库几个基本表基本搭建完毕,看了下Github Develop的V4 Api抛弃了RESTful,采用GraphQL,感觉很有意思,一看文档,竟然有Python的开源实现 Graphene ,这就很舒服了。
    反正也是学习,搞起来。

    Flask + Graphene + SQLAlchamy + MariaDB

    花了点小时间的,搞出了我的第一个GraphQL接口。还是有点意思的。

    findBookTypes{
      edges{
            node{
                typeId
                typeName
                parentTypeId
                summary
            }
       }
    }
    

    上边就是个GraphQL的query语句。

    Flask CORS

    之前我是手动设置,每个路由都要设置一下Access-Control-Allow-Origin,结果调用了一个Flask GraphQL的库,response被它封装起来了,皮的很。我又不想去手动改他的库,故而找到这个 Flask CORS库还是很给力的,一键配置跨域。
    现在的开源,是真的给力哦,果断star

    app = Flask(__name__)
    CORS(app, supports_credentials=True)
    

    SQLAlchamy 语法

    跟传统sql语句还是有点区别的,得花点时间研究研究怎么把传统sql语句弄成符合这款ORM框架的语法。先弄点常用的用用。
    跟表关联 ORM

    """作品相关"""
    class BookType(Base):
        """作品类别"""
        __tablename__ = 'BOOK_TYPE'
        type_id = Column(Integer, primary_key=True)
        type_name = Column(String(255))
        summary = Column(String(255))
        parent_type_id = Column(Integer)
        state = Column(Integer)
        createtime = Column(DateTime)
    

    查询

    query.filter(BookTypeModel.parent_type_id==args.get('parentTypeId')) 
    Books.get_query(info).filter(BookModel.book_id==input.get('book_id')).first()
    

    Graphene 规则

    这个库还是要跟着文档走,里面语法不能错,否则很容易出错。
    还有就是github上有些代码是基于老版本的,照着写也会出错,所以要注意版本升级。给个例子吧:

    class Query(graphene.ObjectType):
            node = relay.Node.Field()
            findBookTypes = SQLAlchemyConnectionField(BookTypes, 
                typeId=graphene.Int(), parentTypeId=graphene.Int(),  
                description="通过typeId或者parentTypeId查询书类")
            def resolve_findBookTypes(self, info, **args):
                query = BookTypes.get_query(info)
                if args.get('typeId') is not None:
                    return query.filter(BookTypeModel.type_id==args.get('typeId'))
                elif args.get('parentTypeId') is not None:
                    return query.filter(BookTypeModel.parent_type_id==args.get('parentTypeId'))             
                else:
                    return query
            
            findRanks = SQLAlchemyConnectionField(BookTypes, 
                rankTypeId=graphene.Int(required=True),
                description="通过rankTypeId查询排行榜")
            def resolve_findRanks(self, info, rankTypeId):
                query = Ranks.get_query(info)
                return query.filter(RankModel.rank_type_id==rankTypeId)
    

    好了好了,该睡觉了。

  • 相关阅读:
    c++------引用(左值与右值,引用一个数组,const限制)
    c++------智能指针,tuple多元数组
    c++中const和c中const区别
    c++新特性-------函数包装器,模板元加速
    c++新特性---lambda表达式
    c++新特性-收缩转换,二进制,constexpr,以及namespace&&inline
    Eureka 注册中心 和 Config中心 配置
    最近的日子-2019/8/12
    工作上的态度
    保持运动 对心情很重要
  • 原文地址:https://www.cnblogs.com/jiajin/p/8460669.html
Copyright © 2011-2022 走看看