前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >七月小说网 Python + GraphQL (三)

七月小说网 Python + GraphQL (三)

作者头像
从今若
发布2019-09-19 15:44:39
3560
发布2019-09-19 15:44:39
举报
文章被收录于专栏:家劲家劲

概述

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

Flask + Graphene + SQLAlchamy + MariaDB

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

代码语言:javascript
复制
findBookTypes{
  edges{
        node{
            typeId
            typeName
            parentTypeId
            summary
        }
   }
}

上边就是个GraphQL的query语句。

Flask CORS

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

代码语言:javascript
复制
app = Flask(__name__)
CORS(app, supports_credentials=True)

SQLAlchamy 语法

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

代码语言:javascript
复制
"""作品相关"""
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)

查询

代码语言:javascript
复制
query.filter(BookTypeModel.parent_type_id==args.get('parentTypeId')) 
Books.get_query(info).filter(BookModel.book_id==input.get('book_id')).first()

Graphene 规则

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

代码语言:javascript
复制
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)

好了好了,该睡觉了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • Flask + Graphene + SQLAlchamy + MariaDB
  • Flask CORS
  • SQLAlchamy 语法
  • Graphene 规则
相关产品与服务
云数据库 MariaDB
腾讯云数据库 MariaDB(TencentDB for MariaDB) 让您轻松在云端部署、使用 MariaDB 数据库。MariaDB 是在 MySQL 版权被 Oracle 收购后,由 MySQL 创始人 Monty 创立,其版权授予了“MariaDB基金会(非营利性组织)”以保证 MariaDB 永远开源,良好的开源策略,是企业级应用的最优选择,主流开源社区系统/软件的数据库系统,均已默认配置 MariaDB。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档