Centos7 部署 Flask 启动 RestFul API

官方文档地址: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 进行测试。

 

### 安装和配置环境 为了在 CentOS 7.5 上顺利安装并部署 DeepSeek,并使其能够与 OpenUI 配合工作,需要先准备合适的运行环境。这包括但不限于 Python 版本的选择以及必要的依赖库。 #### 准备Python环境 考虑到特定版本的需求,在此推荐使用 Python 3.8 或以上版本来确保兼容性。如果系统默认未提供该版本,则需通过源码编译或其他方式单独安装指定版本的 Python 解释器[^1]。 ```bash sudo yum install python38-devel gcc make curl -O https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz tar xzf Python-3.8.0.tgz cd Python-3.8.0 ./configure --prefix=/usr/local/python3.8 make && sudo make altinstall ``` ### 安装DeepSeek及其依赖项 完成上述准备工作之后,可以按照官方文档指示开始正式安装过程: 1. **创建虚拟环境** 推荐为项目建立独立的 Python 虚拟环境以隔离不同项目的包管理冲突。 ```bash /usr/local/python3.8/bin/python3.8 -m venv deepseek-env source ./deepseek-env/bin/activate ``` 2. **安装模型转换工具** 执行命令 `pip3.8 install llama-cpp-python[server] --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu` 来获取所需的模型转换工具及相关依赖。 3. **其他可能必需的软件包** 对于某些特殊功能模块,还可能存在额外的依赖关系。这些通常会在首次尝试启动服务时报错提示缺失哪些组件;此时应根据错误信息逐一解决直至全部满足为止。 ### 整合OpenUI界面支持 为了让前端用户更方便地操作后台的服务端逻辑,集成图形化Web UI是非常有帮助的做法之一。对于如何具体实现这一点,取决于所选用的具体框架和技术栈。这里假设采用 Flask 或 Django 这样的流行 Web 开发平台作为中介层连接前后两端。 #### 构建API接口 无论选择哪种技术方案,都需要定义一组 RESTful API 供前端调用。这部分涉及到路由映射、参数校验、业务处理等多个方面的工作量较大,建议参考相关框架的最佳实践指南来进行设计开发。 #### 前后端通信协议设定 确保前后端之间有一致的数据交换格式非常重要。JSON 是目前最常用的一种轻量化数据传输格式,易于解析且跨语言通用性强。因此可以在双方约定好基于 JSON 的消息体结构基础上开展进一步的合作对接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值