专栏首页家劲七月小说网 Python + GraphQL (三)

七月小说网 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)

好了好了,该睡觉了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 单元测试 增强系统健壮性

    1.JulyNovel需要在request_url插入spider.wait队列之前去判断有没有必要去爬这条url

    从今若
  • React + Python 七月小说网 功能设计(二)

    在通过对世面上的各种小说网站简单了解之后(PS:好多盗版网站真的好丑哦。),去除花里胡哨的功能,保留实用功能。 初步制定了以下几个功能需求,当然,所有需求功能...

    从今若
  • 关于Relay的麻烦之处

    直接在render里进行setState会导致组件无限循环渲染,当然把queryrender取缔掉用fetch替换可以解决,但是怎么在使用relay的同时直接s...

    从今若
  • SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列

    这篇文章主要讲述如何在springboot中用reids实现消息队列。 准备阶段 安装redis,可参考我的另一篇文章,5分钟带你入门Redis。 java 1...

    方志朋
  • 干掉支付宝留在Mac OS X里的进程

    AlipayDispatcherService 是支付宝留在拦截TCP流量的进程。 耗电且不安全。不但每时每刻都会消耗系统的电力,还会拦截所有的TCP流量,这本...

    Linker
  • 业余草 SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)

    这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。

    业余草
  • 如何快速抄写公众号文章

    用户1733462
  • Java面试基础之ArrayList操作

    ArrayList应该是Java开发中经常见到的数据结构了。 曾经在一个面试中遇到这么个问题,

    PhoenixZheng
  • maven 之 setting.xm 的配置详解、说明

    转自:https://www.cnblogs.com/shangxiaofei/p/5416552.html

    微风-- 轻许--
  • css笔记

    从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成...

    用户6362579

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动