麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
776
2023-04-23
从头完成一个 Restful API 服务
今天一起来通过 Flask 快速完成并部署一个 Restuful 服务,不要轻易走开哦!
一、框架概要
先来看看大致的代码框架。
这里说明下,这套代码结构是参照经典flask书籍《Flask Web Development》来写的,想要这本书电子版的,可以联系我哈。
二、代码详解
1,依赖包
放到了requirements文件里。
2,配置文件
在config.py文件里。
import osbasedir = os.path.abspath(os.path.dirname(__file__))class Config: @staticmethod def init_app(app): passclass DevelopmentConfig(Config): passclass TestingConfig(Config): TESTING = True SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'my.sqlite3')class ProductionConfig(Config): SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig}
这里我使用了简单易用的 sqlite 数据库,当然也可以使用其他关系型数据库,比如 MySQL 等。
3,程序入口文件
manage.py
4,引入蓝图
蓝图可以帮我们实现模块化应用的功能。
在主程序的__init__.py文件中创建 flask app 并注册模块。
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom config import configdb = SQLAlchemy()def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) db.init_app(app) from .main import main as main_blueprint app.register_blueprint(main_blueprint) from .api_1_0 import api_1_0 as api_blueprint app.register_blueprint(api_blueprint) return app
同时在 api 模块的__init__.py里引入蓝图。
from flask import Blueprintapi_1_0 = Blueprint('api_1_0', __name__, url_prefix='/api')from . import api_user, api_auth
5,表模型
在models.py文件里,定义了当前用到的数据库表结构。
其中 AdminUser 是作为 API 的鉴权用户的存在,后面调用 API 都会使用该用户,而 User 和 Picture 则是后面需要操作的表了。
着重说下 AdminUser 类,定义了一个静态方法 init_user,是用来后面初始化数据库的,我们需要把这个鉴权用户手动添加到数据库中。方法 verify_password 用于后面 API 的鉴权,如果数据库存在该用户的哈希值相同,则鉴权通过。
6,API部分
先到数据库查询用户,如果不存在哈希值不正确,则返回 False,鉴权失败。
7,设计API
在api_user.py文件中,初始化 flask_restful 的 Api 类,用于后面添加 resource。
这里只接受 json 的请求消息体,并且对应的更新数据库中表的值。
三、初始化
使用在 manage 中定义的 shell 命令,进入 shell 界面。
执行 db.create_all() 创建在 models 中定义的表,执行成功之后,查看数据库如下:
表已经创建成功,但是我们的 admin 用户还不存在,继续执行命令 AdminUser.init_user(),插入 Admin 用户。
到此,初始化工作完毕。
四、测试API
执行命令 python manage.py 启动 flask 服务,可以看到已经在本地的9980端口启动。
使用 postman 工具测试 useraddAPI,选择 POST 方式,鉴权方式使用 Basic Auth,body 中使用 json 形式。
发送请求测试如下:
如果修改名字为错误值,都会鉴权失败。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。