Centos7 部署 Flask 启动 RestFul API

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012605477/article/details/84561134

官方文档地址:Flask-Resuful 官方文档

经常见到的Restful内容如下: 

==========  =====================  ==================================
HTTP 方法   行为                   示例
==========  =====================  ==================================
GET         获取资源的信息         http://example.com/api/orders
GET         获取某个特定资源的信息 http://example.com/api/orders/123
POST        创建新资源             http://example.com/api/orders
PUT         更新资源               http://example.com/api/orders/123
DELETE      删除资源               http://example.com/api/orders/123
==========  ====================== ==================================

而我们设计Restful的时候要根据以下案例进行设置:

==========  ===============================================  =============================
HTTP 方法   URL                                              动作
==========  ===============================================  ==============================
GET         http://[hostname]/todo/api/v1.0/tasks            检索任务列表
GET         http://[hostname]/todo/api/v1.0/tasks/[task_id]  检索某个任务
POST        http://[hostname]/todo/api/v1.0/tasks            创建新任务
PUT         http://[hostname]/todo/api/v1.0/tasks/[task_id]  更新任务
DELETE      http://[hostname]/todo/api/v1.0/tasks/[task_id]  删除任务
==========  ================================================ =============================

hostname    即主机名

port  默认不修改则为80,可以不填写的,如果有修改的话,务必填写修改的端口号

下面是通用的经典代码:

from flask import Flask, abort, make_response, request, url_for
from flask import jsonify

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': '我是tasks数组中的成员  No1',
        'description': 'No1的desc',
        'done': False
    },
    {
        'id': 2,
        'title': '我是tasks数组中的成员  No2',
        'description': 'No2的desc',
        'done': False
    }
]

@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({'error': 'Not found'}), 404)


@app.route('/hyl/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})


@app.route('/hyl/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = list(filter(lambda t: t['id'] == task_id, tasks))
    if len(task) == 0:
        abort(404)
    return jsonify({'task': task[0]})


@app.route('/hyl/api/v1.0/tasks', methods=['POST'])
def create_task():
    print(request.json)
    if not request.json or not 'title' in request.json:
        abort(400)
    task = {
        'id': tasks[-1]['id'] + 1,
        'title': request.json['title'],
        'description': request.json.get('description', ""),
        'done': False
    }
    tasks.append(task)
    return jsonify({'task': task}), 201


@app.route('/hyl/api/v1.0/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = list(filter(lambda t: t['id'] == task_id, tasks))
    if len(task) == 0:
        abort(404)
    if not request.json:
        abort(400)
    if 'done' in request.json and type(request.json['done']) is not bool:
        abort(400)
    task[0]['title'] = request.json.get('title', task[0]['title'])
    task[0]['description'] = request.json.get('description', task[0]['description'])
    task[0]['done'] = request.json.get('done', task[0]['done'])
    return jsonify({'task': task[0]})

@app.route('/hyl/api/v1.0/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = list(filter(lambda t: t['id'] == task_id, tasks))
    if len(task) == 0:
        abort(404)
    tasks.remove(task[0])
    return jsonify({'result': True})


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0', port=9000)

与django不同的是,django需要通过urls.py文件,将浏览器的访问路径和视图函数views进行绑定。

而在上面的flask代码中:则是通过@app.route(路由规则) 的方式绑定视图函数, methods 初始为None

虽有差异,但理解起来应该不难。

其次是项目的启动,与django相同的是程序的主入口都是main函数。

django的host设置、端口设置、debug设置都在setting.py文件中,程序的启动则在manage.py文件中。

而flask的上述设置在app.run方法中,启动则在name=main的方法里。

接下来是,环境配置:

1.安装Flask

pip install  flask   (我这里已经安装过)

2. 使用gunicorn 启动 flask项目:

切换到flask目录(我这里的flask目录在svn下面):

启动项目时,flask和django是不太一样的,django项目中gunicorn会去找manage.py。

而flask则要指定所要运行的文件及其主函数:

gunicorn -w4 flask_Demo:app -b0.0.0.0:8000 

 打开浏览器,访问127.0.0.1:8000:

没有问题,访问flask中的其他url地址:

配置nginx:

在nginx 的conf配置中,发现其监听的端口号为8000,而gunicorn也是8000,产生冲突。

返回到flask.demo目录,重新用gunicorn 启动,端口则改为8080

gunicorn -w4 flask_Demo:app -b0.0.0.0:8080
 

启动完成过,启动nginx,nginx配置如下;

这时用8000端口访问,显示如下:

至此,使用flask 编写的简单demo运行ok,

上述例子中未进行post、delete、put测试。

想要测试可以使用postman 或者 curl 进行测试。

猜你喜欢

转载自blog.csdn.net/u012605477/article/details/84561134