持续创造,加快成长!这是我参加「日新方案 6 月更文挑战」的第1天,点击查看活动概况

我们好~我是小方,欢迎我们关注笋货测验笔记体完记住俾个like

布景

曾经在测验团队维护着一个小小的造数渠道(fastapi),将造数脚本进行api化,然后用fastapi自带的swagger文档进行请求,没有web页面,及其不便利,加上写造数脚本相当于写成了一个接口,对于不太熟悉fastapi的同学debug起来极端困难。综上所述,开发数据工厂,将渠道与造数脚本进行解耦,选用apidoc生成脚本入参出参数据,生成web界面,动态导包作为中心履行办法~

共享缘由

现在满大街都是接口测验渠道,数据工厂类似的渠道少之又少,emmmm,那就共享自己做的数据工厂吧详细可看我之前在TesterHome上发的帖子:吐槽帖子

数据工厂流程

整个完成比较简略,我们能够看看流程图

数据工厂系列(1)初始化后端项目

功能清单

功能的话,大概是以下这些,整体而言,数据工厂比较简略,没有接口渠道那么杂乱

数据工厂系列(1)初始化后端项目

阐明

  • 后端接口
    • Python语言的fastpi
  • 前端结构
    • Vue + element ui,开箱即用的项目vue-admin-template
  • 数据库
    • MySQL

项目命名

对了,数据工厂就叫FunDataFactory吧~寓意是我们能够开开心心在数据工厂上进行造数据,对了Fun也跟Fang差不多发音哦,嘻嘻

  • 项目地址
    • 前端:github.com/JokerChat/F…
    • 后端:github.com/JokerChat/F…

鸣谢

  • 无敌哥
    • 感谢无敌哥前期的大力支持,提供了数据工厂的思路
  • BlueMoon-Mh公司
    • 感谢领导们的支持,感谢MH测验团队小伙伴的大力支持,有你们的建议,MhDataFactory才变得更好~

接上篇

上篇我们讲到了后端服务选用的是fastapi后端结构,有关fastapi的教程能够看看官网上的例子,比较容易上手,比flask还毛坯的毛坯房fastapi入门

前期预备

  • IDE
    • pycharm
  • Python
    • python 3.9(我用的是3.9版别,最好保持一致)
  • git
    • git指令掌握(如果不想敲git指令,最好下载个Sourcetree,比较便利)
  • 虚拟环境
    • 掌握虚拟环境venv的根本运用办法

上篇-初始化

  1. 新建项目

这里我直接在github上创立的项目,然后把它拉取下来了,你们能够自行用pycharm创立即可

  1. 创立并激活虚拟环境
# 以下指令仅适用mac或linux,win小伙伴需求自行search哈~
# 在项目跟目录下履行
virtualenv venv
# 激活虚拟环境
source venv/bin/activate

记住pycharm里的解释器要换成虚拟环境的解释器

数据工厂系列(1)初始化后端项目

数据工厂系列(1)初始化后端项目

  1. 装置fastapi&&uvicorn
# 装置fastapi
pip3 install fastapi
# 装置uvicorn
pip3 install uvicorn
  1. 编写一个简略的web服务

项目根目录下新建main.py文件

数据工厂系列(1)初始化后端项目

from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
    return {"message": "Hello World"}
if __name__ == '__main__':
    uvicorn.run(app='main:app', host="0.0.0.0", port=8080, reload=True)

@app.get("/")是一个装修器,代表着root函数与/路由绑定起来,当拜访到/时,就会履行下面的函数,async代表着该函数为一个异步函数。

uvicorn.run(app='main:app', host="0.0.0.0", port=8080, reload=True)意义如下:

  • main:main.py 文件(一个 Python「模块」)。
  • app:在 main.py 文件中经过 app = FastAPI() 创立的目标。
  • host:发动服务的ip,0.0.0.0代表任何都能够拜访
  • port:服务的端口
  • reload:让服务器在更新代码后重新发动。仅在开发时运用该选项
  1. 发动服务 我们直接在main.py里,右键运转即可

数据工厂系列(1)初始化后端项目
或许在控制台里,输入python3 main.py终究服务发动成功~

数据工厂系列(1)初始化后端项目

  1. 拜访地址 浏览器直接拜访http://127.0.0.1:8080看到这段信息,代表方才的root函数履行成功

数据工厂系列(1)初始化后端项目
或许拜访http://127.0.0.1:8080/docs,即可看到自带的swagger文档

数据工厂系列(1)初始化后端项目

中篇-项目目录改造

我们先在项目跟目录底下创立app目录和logs目录以及config.py文件,接着在app目录下别离创立core目录、curd目录、models目录、routers目录、utils目录。新建时记住除了logs目录挑选Directory,其他新建的目录都挑选Python Package

数据工厂系列(1)初始化后端项目
调整后的目录结构如图~

数据工厂系列(1)初始化后端项目

  • app:这个参考了flask的蓝图,项目的主要功能完成
    • core:中心的履行办法
    • curd:与数据库交互的完成办法
    • models:寄存表的模型
    • routers:各个模块的路由
    • utils:通用工具类
  • logs:寄存日志文件
  • config.py:项目的装备文件

下篇-增加装备文件

config.py里增加以下装备

import os
#fastapi 发动装备文件
class Config(object):
    """装备类"""
    #数据库连接信息
    HOST = "127.0.0.1"
    PORT = "3306"
    PWD = "root"
    USER = "root"
    DBNAME = "fun"
    # 数据库装备
    SQLALCHEMY_DATABASE_URI: str = f"mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DBNAME}"
class Text(object):
    """描绘装备"""
    TITLE = "Fun数据工厂"
    VERSION = "v1.0"
    DESCRIPTION = "欢迎来到方总的数据工厂"
class FilePath(object):
    BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 后端服务项目目录
    LOG_FILE_PATH = os.path.join(BASE_DIR, "logs") # 日志文件路径
    if not os.path.isdir(LOG_FILE_PATH): os.mkdir(LOG_FILE_PATH)
    LOG_NAME = os.path.join(LOG_FILE_PATH, 'FunDataFactory.log')

终究篇-改造main.py

在上篇里,我们的初始化APP(FastAPI() 创立的目标)、路由函数和发动服务都是统一放在main.py文件里,比较杂乱无章,不然就是一堆屎山了为此,我们需求进行分层规划~

  • /app/init.py文件里,初始化APP,设置swagger文档的标题、版别和描绘信息
from fastapi import FastAPI
from config import Text
fun = FastAPI(title=Text.TITLE, version=Text.VERSION, description=Text.DESCRIPTION)
  • main.py文件引入fun这个app
from app import fun
@fun.get("/")
async def root():
    return {"message": "Hello World"}
  • 项目根目录下新建runserver.py文件,引入uvicorn并发动后端服务
import uvicorn
if __name__ == '__main__':
    uvicorn.run(app='main:fun', host="0.0.0.0", port=8080, reload=True)

怎么发动,能够回头看一下上篇第5个步骤~ 下图就是发动成功的~

数据工厂系列(1)初始化后端项目

  • 浏览器拜访http://127.0.0.1:8080/docs或许http://127.0.0.1:8080

数据工厂系列(1)初始化后端项目

数据工厂系列(1)初始化后端项目

总结

今日讲解了后端项目的初始化,目录收拾后,项目结构比较明晰,项目地址:github.com/JokerChat/F… 今日的代码也提交了哦,记住敲一下哦~