Adds GraphQL support to your Flask application.
Just use the GraphQLView
view from flask_graphql
from flask import Flask
from flask_graphql import GraphQLView
from schema import schema
app = Flask(__name__)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view(
'graphql',
schema=schema,
graphiql=True,
))
# Optional, for adding batch query support (used in Apollo-Client)
app.add_url_rule('/graphql/batch', view_func=GraphQLView.as_view(
'graphql',
schema=schema,
batch=True
))
if __name__ == '__main__':
app.run()
This will add /graphql
endpoint to your app and enable the GraphiQL IDE.
If you are using the Schema
type of Graphene library, be sure to use the graphql_schema
attribute to pass as schema on the GraphQLView
view. Otherwise, the GraphQLSchema
from graphql-core
is the way to go.
More info at Graphene v3 release notes and GraphQL-core 3 usage.
schema
: The GraphQLSchema
object that you want the view to execute when it gets a valid request.context
: A value to pass as the context_value
to graphql execute
function. By default is set to dict
with request object at key request
.root_value
: The root_value
you want to provide to graphql execute
.pretty
: Whether or not you want the response to be pretty printed JSON.graphiql
: If True
, may present GraphiQL when loaded directly from a browser (a useful tool for debugging and exploration).graphiql_version
: The graphiql version to load. Defaults to "1.0.3".graphiql_template
: Inject a Jinja template string to customize GraphiQL.graphiql_html_title
: The graphiql title to display. Defaults to "GraphiQL".batch
: Set the GraphQL view as batch (for using in Apollo-Client or ReactRelayNetworkLayer)middleware
: A list of graphql middlewares.encode
: the encoder to use for responses (sensibly defaults to graphql_server.json_encode
).format_error
: the error formatter to use for responses (sensibly defaults to graphql_server.default_format_error
.subscriptions
: The GraphiQL socket endpoint for using subscriptions in graphql-ws.headers
: An optional GraphQL string to use as the initial displayed request headers, if not provided, the stored headers will be used.default_query
: An optional GraphQL string to use when no query is provided and no stored query exists from a previous session. If not provided, GraphiQL will use its own default query.header_editor_enabled
: An optional boolean which enables the header editor when true. Defaults to false.should_persist_headers
: An optional boolean which enables to persist headers to storage when true. Defaults to false.You can also subclass GraphQLView
and overwrite get_root_value(self, request)
to have a dynamic root valueper request.
class UserRootValue(GraphQLView):
def get_root_value(self, request):
return request.user
Since v3, flask-graphql
code lives at graphql-server repository to keep any breaking change on the base package on sync with all other integrations. In order to contribute, please take a look at CONTRIBUTING.md.
如果您喜欢编写常规的SQL语句,那么为什么不使用SQLAlchemy来完成这项工作呢?你不需要使用像这样的链式方法 join , filter_by 等来查询数据库。 为了回答这个问题,我需要对你的 models 文件。我假设是这样的: from flask_sqlalchemy import SQLAlchemy import datetime db = SQLAlchemy() class B
背景 常见的RESTful API中,每个API负责请求一种类型的对象,一个页面往往需要多次请求接口,且经常存在依赖关系,无法并行发送请求。在工作中是否经常遇到这个场景: 产品:本次需求我们需要在页面上新增***展示。 前端:目前后端提供的接口中没有返回,需要新增字段。 后端:这个接口现在多方在使用,需要评估是否会对其他使用方有影响,且目前排期已满,需要等到****版本才能做。 产品:Boss说明
flask graphql by Max Goh 由Max Goh Up until now, I have mostly been developing new Flask projects from scratch. As most projects tend to consist of similar folder structures, it gets really mundane set
1 安装依赖包 pip install flask flask-graphql flask-migrate sqlalchemy graphene graphene-sqlalchemy psycopg2 2 demo app.py # Imports from flask import Flask from flask_sqlalchemy import SQLAlchemy import g
两者的区别(个人理解,简单写一下) 1 SQLALchemy,他连接数据库比较方便,就建立创建基类和对应的ORM, 连接数据库,创建引擎,创建会话,创建实例,创建实例,就可以对数据库对应的数据表进行对应的操作 2 Flask-SQLAlchemy ,这话比较麻烦一点,必须要在上下文推动才能连接到数据,也就是路由请求。但是它可以一次性绑定两个数据库。 SQLALchemy连接数据库 from sql
开发目标: 实现一个 Web 服务,这个服务使用 Flask 框架,API 使用 Graphql。 这个 Web 服务很简单,它提供书籍的查询与添加功能(修改和删除与添加类似,故不赘述)。通过这个例子,希望可以帮助大家了解以下两点 如何使用 Graphql 进行API设计 如何进行 Graphql 的后端开发 Install 首先,安装一下下面这几个模块。 # python 3.6 以上 pip
昨天我们尝试用koa操作MongoDB和GraphQL,今天不如试一下Flask操作MongoDB以及GraphQL。 MongoDB数据库就不需要多讲了,FlaskcaozuoMongoDB的方式主要分为两种,一种是类似原生的方法,另一种则是ORM,前者Python提供了类似pymongo之类的工具,后者则有MongoEngine。对于Flask,还有Flask-mongoengine之类的插件
背景 常见的RESTful API中,每个API负责请求一种类型的对象,一个页面往往需要多次请求接口,且经常存在依赖关系,无法并行发送请求。在工作中是否经常遇到这个场景: 产品:本次需求我们需要在页面上新增***展示。 前端:目前后端提供的接口中没有返回,需要新增字段。 后端:这个接口现在多方在使用,需要评估是否会对其他使用方有影响,且目前排期已满,需要等到****版本才能做。 产品:Boss说明
问题内容: 在官方的快速入门中,建议在使用单个 模块 时使用: 2. …如果您使用的是单个模块(如本例所示),则应使用,因为取决于它是作为应用程序启动还是作为模块导入,其名称将有所不同(与实际导入名称不同)。… 但是,在他们的API文档中,当我的应用程序为 软件包 时,建议进行硬编码: 因此,您在此处提供的内容很重要。如果使用单个模块,则始终为正确的值。但是,如果您使用的是包,通常建议在其中硬编码
在前面,我们介绍了 REST Web 服务,并使用 Flask 提供服务。这里,我们使用第三方库 Flask-RESTful,它使得在 Flask 中提供 REST 服务变得更加简单。 安装 使用 pip 安装: $ pip install flask-restful 使用 下面我们主要使用官方文档的例子进行说明。 Hello World 我们先来看一个简单的例子。 # -*- coding: u
Bootstrap 是 Twitter 开源的一个 CSS/HTML 框架,它让 Web 开发变得更加迅速,简单。要想在我们的 Flask 应用中使用 Boostrap,有两种方案可供选择: 第 1 种,在我们的 Jinja 模板中直接引入 Bootstrap 层叠样式表 (CSS) 和 JavaScript 文件,比如 bootstrap.min.css,bootstrap.min.js; 第
在 Web 应用中,我们经常需要保护我们的 api,以避免非法访问。比如,只允许登录成功的用户发表评论等。Flask-HTTPAuth 扩展可以很好地对 HTTP 的请求进行认证,不依赖于 Cookie 和 Session。本文主要介绍两种认证的方式:基于密码和基于令牌 (token)。 安装 使用 pip 安装: $ pip install Flask-HTTPAuth 基于密码的认证 为了简化
假设你的 Web 服务对于某些请求比较耗时,而该请求的返回结果在较短的时间内(比如 5 分钟内)都是足够有效的,这时你能想到什么方法去改善这种状况呢?缓存?对,至少这是一种提高性能的最简单的方法。 Flask 本身不提供缓存功能,但是作为 Flask 核心的 Werkzeug 框架则提供了一个简单的缓存对象 SimpleCache,它将缓存项存放在 Python 解释器的内存中。使用 Simple
MongoDB 是一个文档型数据库,是 NoSQL (not only SQL) 的一种,具有灵活、易扩展等诸多优点,受到许多开发者的青睐。MongoEngine 是一个用来操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以参考 Flask-SQLAlchemy 一节。在 Flask 中,我们可以直接使用 MongoEngine,也可使用 Flask-MongoEngine
ORM 框架 Web 开发中,一个重要的组成部分便是数据库了。Web 程序中最常用的莫过于关系型数据库了,也称 SQL 数据库。另外,文档数据库(如 mongodb)、键值对数据库(如 redis)近几年也逐渐在 web 开发中流行起来,我们习惯把这两种数据库称为 NoSQL 数据库。 大多数的关系型数据库引擎(比如 MySQL、Postgres 和 SQLite)都有对应的 Python 包。在
给用户发送邮件是 Web 应用中最常见的任务之一,比如用户注册,找回密码等。Python 内置了一个 smtplib 的模块,可以用来发送邮件,这里我们使用 Flask-Mail,是因为它可以和 Flask 集成,让我们更方便地实现此功能。 安装 使用pip安装: $ pip install Flask-Mail 或下载源码安装: $ git clone https://github.com/ma