Skip to content

Flask服务Demo

依赖环境

Dockerfile
FROM ubuntu:22.04

RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt update

RUN apt install -y libpq-dev
RUN apt install -y python3.8 python3-pip python3-dev
RUN apt install -y make

RUN DEBIAN_FRONTEND=noninteractive TZ=Asia/Shanghai apt-get -y install tzdata
ENV TZ=Asia/Shanghai

RUN python3.8 -m pip install poetry -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN ln -s /usr/bin/python3 /usr/bin/python
toml
[tool.poetry]
name = "project"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.8"
gevent = "^21.12.0"
Flask = "^2.2.2"
Flask-RESTful = "^0.3.9"
loguru = "^0.6.0"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
yml
version: '2'
services:
    web:
        build: .
        restart: always
        volumes:
          - .:/root/project
          - ./cache:/root/.cache/
        working_dir: /root/project
        command: poetry run python interface.py
        ports:
          - "9000:9000"
        logging:
          driver: "json-file"
          options:
            max-size: "10000k"
            max-file: "10"
Makefile
WORK_DIR    := /root/project

DOCKER_u2py := docker run --rm -it -v $(PWD):$(WORK_DIR) -v $(PWD)/cache:/root/.cache/ -w $(WORK_DIR) u2py

build:
	docker build . -t u2py
init:
	$(DOCKER_u2py) poetry init
install:
	$(DOCKER_u2py) poetry install
# add:
# 	$(DOCKER_u2py) poetry add loguru
run:
	$(DOCKER_u2py) poetry run python interface.py
test:
	$(DOCKER_u2py) poetry run python test.py

代码

python
from gevent import pywsgi
from flask import Flask, Blueprint, request
from flask_restful import Api, Resource
from loguru import logger
from config import WEB_PORT

logger.add("log/login.log", rotation="500MB")
app = Flask(__name__)

bp_server = Blueprint('api', __name__)
api = Api(bp_server)


class LoginItem(Resource):
    def post(self):
        d = request.json
        logger.info(d)
        logger.info(d.get('username'))
        return dict(code=200, msg="success")

api.add_resource(LoginItem, '/login')
app.register_blueprint(bp_server, url_prefix='/server')

def main():
    port = WEB_PORT
    print('[+] API running on {}'.format(port))
    app.run(port=port, host="0.0.0.0", debug=True)
    # server = pywsgi.WSGIServer(('', port), app)
    # server.serve_forever()


if __name__ == "__main__":
    main()