七月小说网 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)
好了好了,该睡觉了。
七月小说网 Python + GraphQL (三)的更多相关文章
- React + Python 七月小说网 启程(一)
一.为啥要做这个网站 很久没有写技术相关的博客了,最近几个月忙飞,各种工作,技术根本学不完,很难受. 趁着春节期间,终于有空闲时间做自己爱做的事情了,美滋滋. 热爱技术,热爱小说,于是诞生了个这么玩意 ...
- React + Python 七月小说网 功能设计(二)
概述 在通过对世面上的各种小说网站简单了解之后(PS:好多盗版网站真的好丑哦.),去除花里胡哨的功能,保留实用功能. 初步制定了以下几个功能需求,当然,所有需求功能都是我自己设计.自己评审,大不了到时 ...
- Redis 七月小说网的爬虫缓存设计
一.爬虫策略 1.主服务器先根据spider.all set排重,再 lpush request_url 到spider.wait List中,并且 sadd request_url 到 set中: ...
- Python的scrapy之爬取顶点小说网的所有小说
闲来无事用Python的scrapy框架练练手,爬取顶点小说网的所有小说的详细信息. 看一下网页的构造: tr标签里面的 td 使我们所要爬取的信息 下面是我们要爬取的二级页面 小说的简介信息: 下面 ...
- 使用Python爬虫整理小说网资源-自学
第一次接触python,原本C语言的习惯使得我还不是很适应python的语法风格.希望读者能够给出建议. 相关的入门指导来自以下的网址:https://blog.csdn.net/c406495762 ...
- Python的scrapy之爬取6毛小说网的圣墟
闲来无事想看个小说,打算下载到电脑上看,找了半天,没找到可以下载的网站,于是就想自己爬取一下小说内容并保存到本地 圣墟 第一章 沙漠中的彼岸花 - 辰东 - 6毛小说网 http://www.6ma ...
- 批量下载小说网站上的小说(python爬虫)
随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...
- Python进阶(三十五)-Fiddler命令行和HTTP断点调试
Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
随机推荐
- 蓝桥杯 算法训练 ALGO-108 最大的体积
算法训练 最大体积 时间限制:1.0s 内存限制:256.0MB 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积.假如每个物品有无限件可用,那么有些体积是永 ...
- Linux学习笔记 -- 为 Shell 传递参数
我们可以在执行 Shell 脚本时,可以向脚本传递参数.脚本内获取参数的格式为:$n.(n 代表一个数字,0为所执行的shell脚本名称,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类 ...
- js中的class
js中的class 类写法 class SuperClass { constructor(option) { this.a = option; } fn() { console.log(this.b) ...
- 用exp、dmp导入导出用户到同一个实例下时,类型type会有问题
oralce的type都有唯一id,在同一个实例下,通过导入导出方法创建type时,会有唯一性问题 最好的解决方法使用impdb,expdb的方式导入导出 用oid=n解决. 实在不行,可用稍微麻烦的 ...
- 基于FORM组件学生管理系统【中间件】
目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...
- STM32用有源蜂鸣器实现闹钟的声响
有源蜂鸣器的声音是固定的,工作电压恒定,改变通断电的时间获得不同时长的音响,譬如连续音.快速短音.慢速长音(类似莫尔斯电报)来区分不同的报警信息. 简单的说,有源蜂鸣器只能发出一种声音,因为它的频率是 ...
- 前端自动化之npm
npm——node依赖包管理工具 安装: 1.在nvm目录下复制npm和npm-cath文件夹 2.配置环境变量. 使用: 1.在项目文件夹,shift+右键打开命令窗口 2.npm init ...
- 通过DG_BROKE搭建Oracle11g_adg
1.环境 db_primary db_stanby db版本 11.2.0.4.0 11.2.0.4.0 os版本 centos 6.4 centos 6.4 db_unique_name newte ...
- Shell脚本语法---在Makefile等文件…
1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...
- Linux的基本指令--目录和文件和文件属性和文件用户组
目录和文件 一 . ls:列出目录的内容,未给出目录名或是文件名时,就显示当前目录的信息. -a 列出隐藏文件,文件中以”.”开头的均为隐藏文件,如:~/.bashrc -l 列出文件的详细信息 ...