# pytest **Repository Path**: minXAM/pytest ## Basic Information - **Project Name**: pytest - **Description**: flask-restful-api 基础项目搭建 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-22 - **Last Updated**: 2024-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Flask-REST-API 基础项目搭建 ###### 1.导入的模块 ```python aniso8601==9.0.1 apispec==6.3.1 click==8.1.7 colorama==0.4.6 Flask==2.2.5 flask-apispec==0.11.4 Flask-RESTful==0.3.10 flask-restful-swagger==0.20.2 Flask-SQLAlchemy==3.0.5 greenlet==3.0.3 importlib-metadata==6.7.0 itsdangerous==2.1.2 Jinja2==3.1.3 MarkupSafe==2.1.4 marshmallow==3.19.0 mysqlclient packaging==23.2 pytz==2023.3.post1 PyYAML==6.0.1 six==1.16.0 SQLAlchemy==2.0.24 typing_extensions==4.7.1 webargs==8.3.0 Werkzeug==2.2.3 zipp==3.15.0 gunicorn ``` ###### 2.启动模块配置 ```python from flask import Flask from flask_restful import Api from flask_apispec import FlaskApiSpec from apispec import APISpec from flask_restful_swagger import swagger from apispec.ext.marshmallow import MarshmallowPlugin from loguru import logger from flask_sqlalchemy import SQLAlchemy from common.logger_tool import InterceptHandler app = Flask(__name__) api = swagger.docs(Api(app, prefix="/api/v1")) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1:3306/test' app.config.update({ "APISPEC_SPEC":APISpec( title="flask restful api", version="v1", plugins=[MarshmallowPlugin()], openapi_version="2.0" ), "APISPEC_SWAGGER_URL":"/swagger/", "APISPEC_SWAGGER_UI_URL":"/swagger-ui/" }) logger.add("logs/log.log", level= "DEBUG", rotation='100 MB', compression='zip', retention="72h", backtrace=True, encoding="utf-8") # logger.add("logs/log.log", level='DEBUG', rotation="100MB", retention="5 days", encoding="utf-8") app.logger.addHandler(InterceptHandler()) db = SQLAlchemy(app) docs = FlaskApiSpec(app=app) from resources.demo import Demo from resources.attachment_resource import AttachmentListResource ``` ###### 3.Dockerfile配置 ```bash FROM python:3-slim ADD ./ /code WORKDIR /code # chmod +x start.sh RUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ RUN pip3 config set install.trusted-host pypi.tuna.tsinghua.edu.cn RUN pip3 install -r req.txt # 时区设置 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' >/etc/timezone CMD gunicorn --config gunicorn.conf.py app:app ``` ###### 4.gunicorn.conf.py配置 ```python import gevent.monkey gevent.monkey.patch_all() import multiprocessing debug = True loglevel = 'debug' bind = '0.0.0.0:8060' pidfile = 'logs/gunicorn.pid' # logfile = 'logs/debug.log' #启动的进程数 workers = multiprocessing.cpu_count() * 2 + 1 worker_class = 'gunicorn.workers.ggevent.GeventWorker' x_forwarded_for_header = 'X-FORWARDED-FOR' reload=True ``` ###### 5.docker-compose.yml配置 ```bash version: '3' services: backend build: . ports: - "8060:8060" volumes: - ./:/code/ environment: - TZ=Asia/Shanghai # -------------------------------------- frontend: build: context: ./dist dockerfile: Dockerfile ports: - 8088:80 volumes: - ./dist:/code environment: - TZ=Asia/Shanghai ```