easy-flask
Automatic generate a flask server project by command
Start
Install
pip3 install easy-flask-restful
Make a flask server project at current dir:
easy-flask -n demo_server
# or
easy-flask --new=demo_server
# start server in debug mode
cd demo_server
python3 app.py
# or
sh control.sh start|restart|stop
Introduce
By this tool you don`t need care how to make a flask server project.
What you need to do is write api-file in easy format inside dir api
.
This project will automatically load uri by api-file, and pack json response with same format.
Project structure
.
βββ api
βΒ Β βββ __init__.py
βΒ Β βββ demo
βΒ Β βββ __init__.py
βΒ Β βββ demo_api.py
βββ conf
βΒ Β βββ __init__.py
βΒ Β βββ config.ini
βββ internal
βΒ Β βββ __init__.py
βΒ Β βββ error.py
βΒ Β βββ utils.py
βββ app.py
βββ start.py
βββ control.sh
βββ logs
βββ app.log
api
- write api files here.
internal.error
- define error info here.
app.py
- start app by this file, you can rename it.
conf
- config for application
control.sh
- run app with command by gunicorn
Write Api File
For example:
from flask import g
from internal import Resource
from utils.parser import Type, Required, Default, Min, Max
class DemoApi(Resource):
uri = ['/api/demo']
def get(self):
pattern = {
'num': {Type: int, Min: 10, Max: 100},
'print': {Type: str, Required: True},
'default': {Type: str, Default: 'demo'}
}
data, err = self.parse_request_data(pattern=pattern)
if err:
g.logger.warning(err)
return err
g.logger.info('success')
return {'result': data}
uri
- required by all api file
g.logger
is loaded before each request for making different log_id.
self.parse_request_data
can help you to parse params, it will return ParamsError
when param invalid.
Normal response:
{
"errno": 0,
"data": {
"result": {
"num": 100,
"print": "aaaa",
"default": "demo"
}
},
"msg": "success",
"log_id": "f40c889d1b5744c7a87a9045aea8595c"
}
Error response:
return errno
and msg
according to error.py
.
{
"errno": 2,
"msg": "params error:num check max invalid",
"log_id": "7c53531b93a4406e9d3050bae5b99968"
}
Suggest
A real project must have complex logic and interactions with DB or other service. By this tool, you just can get a simple framework. So I give some suggestions here for writing better code.
-
logic
dir (or other name) for writing complex logic, keep simple in api file. - if you need db operation, use
flask-sqlalchemy
, and mkdirdto
. -
client
dir for interact with other service, and makeBaseClient
class(inherited by other client), because you never want to write same code for many times.