LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 安装
  • 配置
  • 使用
  • 常见Restful API接口

这有帮助吗?

在GitHub上编辑
  1. Python编程
  2. 02 Python Web
  3. flask篇

22.flask-restless

Flask-Restless为使用SQLAlchemy(或Flask-SQLAlchemy)定义的数据库模型提供简单的ReSTful API生成。生成的API以JSON格式发送和接收消息。

安装

pip install flask_restless

配置

  • 导入模块

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_restless.manager import APIManager
  • 数据库配置

HOSTNAME = "127.0.0.1"
PORT = "3306"
DATABASE = "test"
USERNAME = "root"
PASSWORD = "123456"
DB_URI = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

# Create the Flask application and the Flask-SQLAlchemy object.
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
db = SQLAlchemy(app)
  • 创建模型类

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200))
    birth_date = db.Column(db.Date)


class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200))
    published_at = db.Column(db.DateTime)
    author_id = db.Column(db.Integer, db.ForeignKey('person.id'))
    author = db.relationship(Person, backref=db.backref('articles',
                                                        lazy='dynamic'))
  • 生成表

# Create the database tables.
db.create_all()
  • 创建Flask-Restless API manager

# Create the Flask-Restless API manager.
manager = APIManager(app, flask_sqlalchemy_db=db)
  • 创建视图映射,通过/api/<tablename>进行访问

# Create API endpoints, which will be available at /api/<tablename> by
# default. Allowed HTTP methods can be specified as well.
manager.create_api(Person, methods=['GET', 'POST', 'DELETE'])
manager.create_api(Article, methods=['GET'])

使用

通过使用http://<host>:<port>/api/<tablename>进行访问。

  • 通过post请求进行创建数据

>>> import json,requests
>>> person = {'name': 'Bob', 'age': 18}
>>> r = requests.post('http://127.0.0.1:5000/api/person', data=json.dumps(person),headers={'content-type': 'application/json'})
>>> r.status_code, r.headers['content-type'], r.data
(201,
 'application/json, application/json',
 {'age': 18, 'articles': [], 'id': 1, 'name': 'Bob'})
  • 通过get请求获取数据

>>> id = r.json()['id']
>>> r = requests.get('http://127.0.0.1:5000/api/person/%s' % id,headers={'content-type': 'application/json'})
>>> r.status_code, r.headers['content-type']
(200, 'application/json, application/json')
>>> r.json()
{'age': 18, 'articles': [], 'id': 1, 'name': 'Bob'}

常见Restful API接口

  • GET /api/person

    获取所有数据

  • GET /api/person/(int: id)

    通过指定id数据数据

    /api/person/id
  • GET /api/person?q=<searchjson>

    通过关键字参数q匹配参数,进行查询

    >>> import requests
    >>> import json
    >>> 
    >>> url = 'http://127.0.0.1:5000/api/person'
    >>> headers = {'Content-Type': 'application/json'}
    >>> 
    >>>  filters = [dict(name='name', op='like', val='%o%')]
    >>>  params = dict(q=json.dumps(dict(filters=filters)))
    >>>  
    >>> response = requests.get(url, params=params, headers=headers)
    >>> assert response.status_code == 200
    >>> response.json()
    {'num_results': 1, 'objects': [{'age': 18, 'articles': [], 'id': 1, 'name': 'Bob'}], 'page': 1, 'total_pages': 1}
    • name:指定的fieldname字段,即类的属性名称。

    • value:指定的参数值,配置op使用。

    • op:指定匹配的方式

      • 运算符

        • ==, eq, equals, equals_to

        • !=, neq, does_not_equal, not_equal_to

        • >, gt, <, lt

        • >=, ge, gte, geq, <=, le, lte, leq

        • in, not_in

        • is_null, is_not_null

        • like

        • has

        • any

    • limit

      指定要返回的最大对象数。

    • offset

      指定返回实例列表的结果集中的偏移量。

    • order_by

      {"field": <fieldname>, "direction": <directionname>}

      其中,是与所请求模型的字段名称相对应的字符串,而是用于升序的“ asc”或用于降序的“ desc”。

      如果是形式为 __ 的字符串,则可以在相关模型上指定字段。

    • singer

      如果指定为True,只返回一个结果

    示例

    • 任意布尔运算

    GET /api/person?q={"filters":[{"or":[{"name":"age","op":"lt","val":10},{"name":"age","op":"gt","val":20}]}]}

    返回仅包括年龄属性小于10或大于20的Person实例:

    {
      "num_results": 3,
      "total_pages": 1,
      "page": 1,
      "objects":
      [
        {"id": 4, "name": "Abraham", "age": 9},
        {"id": 5, "name": "Isaac", "age": 25},
        {"id": 6, "name": "Job", "age": 37}
      ]
    }
    • 两个值之间的属性

    GET /api/person?q={"filters":[{"name":"age","op":"ge","val":10},{"name":"age","op":"le","val":20}]}

    返回包括年龄属性在10到20之间的Person实例:

    {
      "num_results": 6,
      "total_pages": 3,
      "page": 2,
      "objects":
      [
        {"id": 2, "name": "John", "age": 13},
        {"id": 3, "name": "Mary", "age": 18}
      ]
    }
    • 一个结果

    GET /api/person?q={"filters":[{"name":"id","op":"eq","val":1}],"single":true} HTTP/1.1

    返回仅包含ID等于1的唯一Person实例:

    {"id": 1, "name": "Jeffrey", "age": 24}
    • 比较两个属性

    GET /api/person?q={"filters":[{"name":"age","op":"ge","field":"height"}]} HTTP/1.1

    返回包含年龄属性大于或等于height属性的值的Person实例:

    {
      "num_results": 6,
      "total_pages": 3,
      "page": 2,
      "objects":
      [
        {"id": 1, "name": "John", "age": 80, "height": 65},
        {"id": 2, "name": "Mary", "age": 73, "height": 60}
      ]
    }
    • 关系的比较属性

    GET /api/person?q={"filters":[{"name":"computers__manufacturer","op":"any","val":"Apple"}],"single":true} HTTP/1.1

    返回包括与Apple相关的Person实例:

    {
      "num_results": 6,
      "total_pages": 3,
      "page": 2,
      "objects":
        {
          "id": 1,
          "name": "John",
          "computers": [
            { "id": 1, "manufacturer": "Dell", "model": "Inspiron 9300"},
            { "id": 2, "manufacturer": "Apple", "model": "MacBook"}
          ]
        },
        {
          "id": 2,
          "name": "Mary",
          "computers": [
            { "id": 3, "manufacturer": "Apple", "model": "iMac"}
          ]
        }
      ]
    }
    • any

    GET /api/person?q={"filters":[{"name":"computers","op":"any","val":{"name":"id","op":"gt","val":1}}]} HTTP/1.1

    返回包含具有相关计算机实例且其id字段的值大于1的Person实例:

    {
      "num_results": 6,
      "total_pages": 3,
      "page": 2,
      "objects":
      [
        {"id": 1, "name": "John", "age": 80, "height": 65, "computers": [...]},
        {"id": 2, "name": "Mary", "age": 73, "height": 60, "computers": [...]}
      ]
    }
  • DELETE /api/person/(int: id)

    通过指定id删除数据

    /api/person/id
  • DELETE /api/person

    仅当在调用create_api()方法时将allow_delete_many关键字参数设置为True时,此选项才可用。

    删除与q URL查询参数中提供的搜索查询匹配的Person的所有实例。

  • POST /api/person

    创建数据

上一页21.flask上传文件到第三方下一页23.flask-redis

最后更新于3年前

这有帮助吗?

image-20200906180141856
image-20200906180027016

更多参见

文档