IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> APIFlask初体验 -> 正文阅读

[Python知识库]APIFlask初体验

团队需要一个封装接口的工具平台,作为数据团队,Python的普及率比较高,于是就选择了 Python 的 Flask 框架,于是就发现了百度搜索第一条的 APIFlask 这个高级框架。

核心特性

  • 更多方便的装饰器,比如 @app.input()、@app.output()、@app.get()、@app.post() 等等
  • 自动反序列化和验证请求数据,当请求数据不符合模式类要求时,会自动生成包含错误详细信息的错误响应(基于 Webargs)
  • 自动格式化和序列化响应数据,在定义好响应模式后,你可以直接在视图函数返回一个模型类对象,或是返回字典(基于 Marshmallow)
  • 自动生成 OpenAPI Specification 文件,你可以把这个文件导入到 API 调试工具或是用来生成客户端代码(基于 APISpec)
  • 自动生成交互式 API 文档,并自动为蓝本和视图设置对应的标签分类(基于 Swagger UI and Redoc)
  • 自动为 HTTP 错误生成 JSON 格式的错误响应

搭建开发环境

  1. 创建新的Docker容器,并安装依赖
$ docker exec -it -u root da4aafc14644 /bin/bash
$ apt-get update
$ apt-get install python3     # 3.7.3
$ apt-get install python3-pip
$ pip3 install flask      # 2.1.2
$ pip3 install apiflask   # 1.0.0
$ pip3 install flask_sqlalchemy  # 2.5.1
$ pip3 install pymysql    # 1.0.2
    1. Docker 内安装SSH,用于远程调试
$ apt-get install openssh-server
$ apt-get install vim
$ vim /etc/ssh/sshd_config
```增加三行
PubkeyAuthentication yes #启用公钥私钥配对认证方式 
PermitRootLogin yes #允许root用户使用ssh登录 
PasswordAuthentication yes
```
$ /etc/init.d/ssh restart
$ sudo passwd root # root 密码设置为 root
$ ssh localhost # 验证
$ docker commit da4aafc14644 data_microservices # 保存镜像
$ docker stop da4aafc14644 # 关闭容器
$ docker run -d -p 8822:22 -p 5001:5000 data_microservices # 重启镜像
$ docker exec -it -u root b33794dfee7b /bin/bash # 进入容器
$ /etc/init.d/ssh restart
$ ssh root@127.0.0.1 -p 8822 # 验证
  1. 对接VSCODE
### 本地
调出扩展面板(Ctrl+Shift+X)
安装:Remote Development 插件
打开命令面板(Ctrl+Shift+P)
输入remote-ssh,选择open Configuration file,按提示输入主机地址,用户名,密码等信息(一个设置文件中允许同时添加多个连接)。
此时,左侧出现"远程资源管理器选项卡",点连接右侧的attach remote container可连接远程主机。
登录后看起来就像是打开了一个本地项目,选择文件夹作为工作目录。
同时打开多个项目时,右键点击contrainer,选择attach in new window。
### 远程
连接远程主机中的docker,操作如下:
首先,远程主机端也需要启动docker并向外暴露端口如8822。
在左侧打开远程资源管理器,在第二个选项卡选择SSH Target。
打开命令面板(Ctrl+Shift+P),输入remote-ssh,选择open Configuration file,添加如下内容:
Host 192.168.1.201
  HostName 192.168.1.201
  Port 8822
  User root
保存后,左侧远程资源管理器内容被刷新,然后点该项右侧的Connect to Host...并按提示输入密码后,即可正常连接。
### 运行代码
写一个简单的python文件,如:
print("abcde")
然后点击左侧运行按钮,选择运行和调试,此时会提示安装Python扩展,我选择了第一个推荐"Python"。
安装后再运行,选择Python,提示设置launch.json;在左侧面板选择创建launch.json,然后选择Python,保持默认选项即可。
此时,即可通过运行按钮(播放键)直接运行程序,运行结果在下方的终端面板中显示。

  1. 特性验证-Rest/ORM/序列化
from apiflask import APIFlask, Schema
from apiflask.fields import Integer, String
from apiflask.validators import Length, OneOf
from flask_sqlalchemy import SQLAlchemy

app = APIFlask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@192.168.110.25:3306/apiflask_demo?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class PetModel(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   name = db.Column(db.String(10))
   category = db.Column(db.String(10))


@app.before_first_request
def init_database():
   db.create_all()

   pets = [
       {'name': 'Kitty', 'category': 'cat'},
       {'name': 'Coco', 'category': 'dog'},
       {'name': 'Flash', 'category': 'cat'}
   ]
   for pet_data in pets:
       pet = PetModel(**pet_data)
       db.session.add(pet)
   db.session.commit()

class PetInSchema(Schema):
   name = String(required=True, validate=Length(0, 10))
   category = String(required=True, validate=OneOf(['dog', 'cat']))

class PetOutSchema(Schema):
   id = Integer()
   name = String()
   category = String()

@app.get('/')
def say_hello():
   return {'message': 'Hello!'}


@app.get('/pets/<int:pet_id>')
@app.output(PetOutSchema)
def get_pet(pet_id):
   return PetModel.query.get_or_404(pet_id)

@app.get('/pets')
@app.output(PetOutSchema(many=True))
def get_pets():
   return PetModel.query.all()

@app.post('/pets')
@app.input(PetInSchema)
@app.output(PetOutSchema, 201)
def create_pet(data):
   pet = PetModel(**data)
   db.session.add(pet)
   db.session.commit()
   return pet

@app.patch('/pets/<int:pet_id>')
@app.input(PetInSchema(partial=True))
@app.output(PetOutSchema)
def update_pet(pet_id, data):
   pet = PetModel.query.get_or_404(pet_id)
   for attr, value in data.items():
       setattr(pet, attr, value)
   db.session.commit()
   return pet

@app.delete('/pets/<int:pet_id>')
@app.output({}, 204)
def delete_pet(pet_id):
   pet = PetModel.query.get_or_404(pet_id)
   db.session.delete(pet)
   db.session.commit()
   return ''

  1. 特性验证-Swagger
http://127.0.0.1:5001/docs
  1. 特性验证-OpenAPI Specification
$ flask spec --output openapi.json
# postman 导入 openapi.json 调试接口
1. 打开postman,在workspace中点击import
2. 点击upload files—选择 openapi.json 文件

参考文档

https://apiflask.com/docs/

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:25:25  更:2022-05-11 16:25:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:37:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码