Python-网络编程之mock(模拟)接口开发

mock接口开发:
1.模拟没有开发好的接口,进行测试
2.给别人提供数据

flask:轻量级的web开发框架
alt+enter:自动导入模块
import flask,json
server = flask.Flask(__name__) # __name__表示当前的python文件,server表示将当前的python文件当做一个服务

# 此句表示下一行定义的函数是一个接口(和函数定义必须挨着写),/login表示接口访问路径,server是上方定义的服务,route('')表示首页
@server.route('/login')
def welcome():# 一个函数就是一个接口
    data = {'code':0,'msg':'登录成功','session_id':'saddhjdgshgdscv'}
    return json.dumps(data,ensure_ascii=False)

@server.route('/test')
def test():
    data = {'code':0,'msg':'test'}
    return json.dumps(data)  # 表示返回json格式的字符串
# get请求

@server.route('/urlData') # get请求,参数在url里面
def urlData():
    msg = flask.request.args.get('name') # 访问时需要带参数的get请求;name是需要传的参数,若有多个则传多个即可
    return msg
# post请求

@server.route('/post1',methods=['post']) # post请求;methods=['post']表示此为post请求;可不写,默认为get请求
def post():
    # get请求
    u = flask.request.args.get('name')
    p = flask.request.args.get('passwd')
    # post请求,postman中form-data中key-value形式,需要postman访问
    stu_name = flask.request.values.get('stu_name')
    stu_addr = flask.request.values.get('stu_addr')
    data = {'username':u,'passwd':p,'stu_name':stu_name,'stu_addr':stu_addr}
    return json.dumps(data,ensure_ascii=False)
# 参数是json格式(post请求)

@server.route('/json1',methods=['post']) # 参数是json格式
def post_json():
    if flask.request.is_json:
        stu_name = flask.request.json.get('stu_name')
        stu_addr = flask.request.json.get('stu_addr')
        data = {'stu_name': stu_name, 'stu_addr': stu_addr}
        return json.dumps(data, ensure_ascii=False)
    else:
        return json.dumps({'msg':'入参请传入json'}, ensure_ascii=False)
# 上传文件(post请求)

@server.route('/upload',methods=['post'])
def uploadFile():
    file = flask.request.files.get("f")
    print(file.filename) # 获取到上传文件的文件名;file.filename可以获取到文件名
    file.save(file.filename) # 保存
    # path = r'E:\图片\壁纸'+file.filename
    # file.save(path)
    return json.dumps({'msg':'successful'}, ensure_ascii=False)
# 练习:获取数据库某张表的数据

# 操作数据库
import pymysql

def op_mysql(sql:str):
    mysql_info = {
        'host': 'XXX.XXX.XXX.XXX',
        'port': XXX,
        'password': 'XXX',
        'user': 'XXX',
        'db': 'jxz',
        'charset': 'utf8',
        'autocommit': True # 自动提交
    }
    result = '执行完成'
    conn = pymysql.connect(**mysql_info)
    cur = conn.cursor(pymysql.cursors.DictCursor) #建立游标
    cur.execute(sql)
    if sql.strip().lower().startswith('select'):
        # result  = cur.fetchone() # 获取一条结果
        result  = cur.fetchall() # 获取所有结果
    cur.close()
    conn.close()
    return result

@server.route('/table_data')
def get_table_data():
    # 没有校验表是否存在
    list = ['app_myuser','dsk_test','app_student','app_product']
    table_name = flask.request.args.get('table_name')
    if table_name not in list:
        return json.dumps({'msg':'没有权限'})
    limit = flask.request.args.get('limit','10') # 表中数据数量,10表示默认显示几条数据
    if limit.isdigit():
        sql = 'select * from %s limit %s;'%(table_name,limit)
    else:
        return json.dumps({'limit请传入一个整数!'}, ensure_ascii=False)
    return json.dumps(op_mysql(sql),ensure_ascii=False)

server.run(host='0.0.0.0',port=8888,debug=True)
# 启动服务,port是端口号,可以不指定,不指定时默认5000,debug=True表示修改代码后,会自动重启
# 只能写在所有接口最下面,否则下方的接口会未被启动;只能运行一个服务
# host='0.0.0.0'表示以本机的实际ip为访问地址,在同一个局域网中的,可以相互访问
# 不加host,访问地址为127.0.0.1,只能自己访问自己
说明:
上方两个接口都是写在定义的server服务下的
未加debug=True时,修改代码需要重启时,需要关闭之前的服务,或者使用停止服务上方的重启按钮进行重启,否则端口会被占用而报错

将程序分成各种类型文件时,导入其他文件时,主目录右击--Mark Directory as--Source root 即可成功使用被导入模块内容

导出已经安装的第三方模块:pip freeze > 导出文件名.txt
批量安装第三方模块:pip install -r 导出文件名.txt

上图设置后的,导入模块方式:
from . import tools # 在同一路径下时,可以使用.导入;使用方式:tools.xxx

from config import setting # 表示导入config中的setting
posted @ 2019-05-24 17:17  情绪疯子  阅读(834)  评论(0编辑  收藏  举报