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