使用Flask模拟服务器返回(一)

本文介绍如何使用Flask框架及Flask-SQLAlchemy插件搭建一个模拟第三方插件的服务,用于减少对外部系统的依赖,并提供数据库连接配置、模型定义等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:因为项目需要,对接了别的部门的产品(暂且称做第三方插件)。在测试的时候(尤其一些大型系统的性能测试),为了减少这种对第三方插件的依赖,集中测试本系统的性能,往往需要开发“挡板”,即模拟第三方插件的返回。

环境:CentOS7 + Python2.7 + Flask(0.11.1)+Flask-SQLAlchemy(2.3.2) + MySQL(5.6)

步骤:

一、 环境安装

1. 安装Flask

Flask官方中文文档中有详细介绍,详情请戳:http://www.pythondoc.com/flask/installation.html#installation

注意:如果没有安装pip的,需要配置一下pip.conf文件。

1)新建文件夹:/etc/.pip

2)新建配置文件:pip.conf。写上如下内容:

[global]

index-url = http://127.0.0.1:10011/pypi/web/simple    # 这里的端口号10011根据自己的环境情况配置

[install]

trusted-host = 127.0.0.1

2. 安装Flask-SQLAlchemy

# pip install flask-sqlalchemy

3. 安装Flask-mysql

# yum install python2-mysql

# pip install flask-mysql

二、脚本开发

对于Flask的详细应用,可以参考官方文档:http://www.pythondoc.com/flask/quickstart.html#quickstart

对于Flask SQLAlchemy的详细应用,可以参考官方文档:http://www.pythondoc.com/flask-sqlalchemy/quickstart.html

这里只介绍在脚本开发中遇到的一些问题:

1. 数据库的链接和模型

from flask import Flask, request, make_response    # 导入Flask类

from flask_sqlalchemy import SQLAlchemy

import json

app = Flask(__name__)    # 创建Flask实例

app.config['SQLALCHEMY_DATABASE_URI'] = 

      'mysql+pymysql://<username>:<password>@<ip>:<port>/<db name>'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

 

class DBModel(db.Model):    # 数据库表结构

    __tablename__ = '<table name>'

    id = db.Column(db.Integer, primary_key=True)

    c1 = db.Column(db.String(100))

    c2 = db.Column(db.String(100), default="100")

    def __init__(self, c1, c2="100"):

        self.c1 = c1

        self.c2 = c2

2. 方法要写对和全。如果遇到这种错误,先检查一下@app.route('', methods=[''])中的methods是否写全了方法:

<title>405 Method Not Allowed</title>

<h1>Method Not Allowed</h1>

<p>The method is not allowed for the requested URL.</p>

3. 复杂的返回体。

返回示例:

 

{

            "status": "success",

            "data": {

                "content": [

                    {"username": "test1", "quota": "100"},

                    {"username": "test2", "quota": "100"},

                ]

            }

}

 

query_recs = db.session.query(DBModel).all()    # 查询出表中所有记录

data_list = []

for item in query_recs:

        temp_dict = {

            "username": item.c1,

            "quota": item.c2

        }

        data_list.append(temp_dict)

res = {

            "status": "success",

            "data": {

                "content": data_list

            }

}

return make_response(json.dumps(res))

4. 获取url中的请求数据

如,http://localhost:80/api?username=admin,想要获取admin这个指时:request.args.get("username")

5. 获取请求体中的数据

如,返回体为:

{

    "data": {

        "id": 1,

        "name": "test"

    }

}

想要获取name时:req_name = json.loads(request.data)['data']['id']

6. 修改数据库中的值时,注意保存进去的格式

req_name = json.loads(reques.data)['name ']

req_content = json.loads(reques.data)['content ']    # 从请求提中获取字段的值,这是一个字典类型

temp = DBModel.query.filter_by(name=req_name).first()    # 查询出指定的记录,filter_by类似where语句

temp.content = json.dumps(req_content )    # 数据库中的content是varchar类型

db.session.commit()

7. 出现No Module Named MySQLdb

这是因为安装的mysql没有在venv中,重新在venv中执行一次pip install mysql-python即可

三、参考资料

1. https://blog.youkuaiyun.com/sun_dragon/article/details/51719753

2. http://www.cnblogs.com/xiaoxi-3-/p/8026504.html

3. https://www.cnblogs.com/alima/p/5734992.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值