fastapi 大型应用_FastApi应用和部署生产环境

最近Python的web框架FastApi火起来了,于是自己也搞了一个,写一下流程。

首先安装fastapi:

pip  install  fastapi

pip  install  uvicorn

新建一个启动文件,就叫main.py吧,引入一下包即可:

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="127.0.0.1", port=8000, reload=True, debug=True)

运行一下就可以了。输入http://127.0.0.1/docs,就会出现fastapi集成的api文档页面。

因为之前一直写php,习惯了mvc得结构,于是自己大概做了个结构,比如我现在需要一个新闻的模块   video_list.py(相当于控制器)  :

from fastapi import APIRouter #引入fastapi的路由

import videoModel #自己的数据模型模块

import verify #自己的验参数模块

router = APIRouter()

@router.post("/video/")

async def video_list(page: verify.PageInfo):

return videoModel.select_videos(page.page, page.pageSize)

然后在主文件引入

from fastapi import FastAPI

import uvicorn

import video_list #引入模块

app = FastAPI()

app.include_router(router=video_list.router) #引入模块路由

@app.get("/")

async def root():

return {"message": "Hello World"}

if __name__ == '__main__':

uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)

就像插线板一样,将每个小模块路由,插在主文件上。

数据模型层也单独建一个文件,在控制层引入一下:

import pymysql

import config

def select_videos(page, page_size):

conf = config.config()

db = pymysql.connect(host=conf['mysql_host'], port=conf['mysql_port'], user=conf['mysql_user'],

passwd=conf['mysql_passwd'], db=conf['mysql_db'], charset='utf8mb4')

#unix_socket='/Applications/MAMP/tmp/mysql/mysql.sock')

result = dict()

limits = (page-1)*page_size

try:

sql = "select videos_id,title,qn_url,qn_thumbnails from `videos` where status = 1 " \

"order by published_at desc limit "+str(limits)+","+str(page_size)

count_sql = "select count(*) as count from `videos` where status = 1"

# 执行SQL语句

cursor = db.cursor()

cursor.execute(sql)

# 获取所有记录列表

lists = cursor.fetchall()

cursor.execute(count_sql)

# 获取所有记录列表

count = cursor.fetchone()

res = []

for i in lists:

data = dict()

data['id'] = i[0]

data['title'] = i[1]

res.append(data)

result['count'] = count[0]

result['list'] = res

except Exception as e:

print(e)

db.close()

return result

这里要注意,控制层给模型层传数据时需要验证参数,使用 pydantic,没有的话pip安装一下,好像python 3.6之前的版本不支持这个。

from pydantic import BaseModel

class PageInfo(BaseModel):

page: int = 1

pageSize: int = 10

我这里验证的分页参数,具体使用规则,看文档。

这样一个简单的结构就完成了,剩下就是部署到生成环境了。需要nginx做转发:

location / {

proxy_pass http://127.0.0.1:8000/;

}

最后,再做一个守护进程让fastapi一直运行着,这里需要安装一个 gunicorn,当然,如果你有其他方式只要能用就行,

pip install gunicorn

然后在命令行输入:

gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker

好了,到此,整个流程就全部完成了。以上都是这两天研究这个框架时简单总结的,如有错误,请留言指出

标签:__,部署,FastApi,app,mysql,应用,fastapi,import,page

来源: https://www.cnblogs.com/xubinbk/p/12886633.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值