接口开发
flask是一个轻量级的接口开发模块,在进行接口开发之前需要先安装flask模块,安装命令如下:
pip install flask
下面是flask用法介绍
import flask,jsonserver = flask.Flask(__name__) #__name__表示当前Python文件@server.route('/login') #装饰器,表示下面的函数就是接口了def welcome(): data = {'code':200,'msg':'meteor登录成功','session_id':'asdfasdfjuiasdfjlkad'} return json.dumps(data,ensure_ascii=False)@server.route('/test1') #装饰器,表示下面的函数就是接口了def test1(): data = {'code':100,'msg':'test success'} return json.dumps(data)@server.route('/')def index(): str = '点
' \ '' return str@server.route('/urldata') #get请求,参数在url里def urlData(): u = flask.request.args.get('username') #url p = flask.request.args.get('password') #url data = {'username':u,'password':p} return json.dumps(data,ensure_ascii=False)@server.route('/post',methods=['post']) #post请求def post(): u = flask.request.args.get('username') # url p = flask.request.args.get('password') # url stu_name = flask.request.values.get('stu_name') addr = flask.request.values.get('addr') data = {'username':u,'password':p,'stu_name':stu_name,'addr':addr} return json.dumps(data,ensure_ascii=False)@server.route('/api/add_stu',methods=['post'])def stu(): name = flask.request.values.get('name') age = flask.request.values.get('age') classes = flask.request.values.get('classes') addr = flask.request.values.get('addr') sex = flask.request.values.get('sex') phone = flask.request.values.get('phone') data = {'name':name,'age':age,'classes':classes,'sex':sex,'phone':phone} return json.dumps(data,ensure_ascii=False )#入参是json的@server.route('/api/add_stu2',methods=['post'])def stu2(): if flask.request.is_json: name = flask.request.json.get('name') age = flask.request.json.get('age') classes = flask.request.json.get('class') addr = flask.request.json.get('addr') sex = flask.request.json.get('sex') phone = flask.request.json.get('phone') print(flask.request.json) return json.dumps({'msg':'添加成功'},ensure_ascii=False) else: return json.dumps({'msg':'入参请传入json'},ensure_ascii=False)#上传文件的@server.route('/file',methods=['post'])def uploadFile(): file = flask.request.files.get('file') print(file.filename) #获取到上传的文件名 file.save(file.filename) return json.dumps({'msg':'上传完成!'},ensure_ascii=False)server.run(host='0.0.0.0',port=8888,debug=True) #默认端口号是5000 debug=True改完代码会自动重启
以上代码都是写在一个Python文件中的,一般真正进行开发的时候不会讲所有代码都写在一个Python文件中,各个工程或者项目会根据实际情况建立多个文件夹,分别存在配置信息,引用的函数,接口信息等,下面举例介绍:
- 先建立一个文件夹,如szz_api
- 这个文件夹下分别建立config、lib、log文件夹
- 建立main.py文件和read.txt文件
- config文件夹下建立setting.py文件
- b文件夹下建立interface.py和tools.py文件
最后目录结构如下:
szz_api/ ├── config │ └── setting.py ├── lib │ ├── interface.py │ └── tools.py ├── log ├── main.py └── read.txt下面我们来看一下每个文件中的内容
setting.py(这里面存的都是配置信息):mysql_info = { 'host': 'IP #IP 'port': 3306, #端口 'password': '123456', #密码 'user': 'xxx #账号 'db': 'xxx #数据库 'charset': 'utf8', 'autocommit': True }redis_info = { 'host':'IP #IP 'port':6379, #端口 'passwd':'Hxxx#密码 'db':9 #数据库}SALT='$%*^(2dfsdfaf' #盐#接口server_info = { 'port':8888, #端口号 'debug':True, #是否调试模式 'host':'0.0.0.0' #绑定IP}
tools.py(这里面都是需要用到的函数、模块):
import hashlib,pymysqlfrom config import setting #从config文件夹下引用setting文件def md5(s,): s = (str(s)+setting.SALT).encode() m = hashlib.md5(s) #加密 return m.hexdigest()def op_mysql(sql:str): result = '执行完成' conn = pymysql.connect(**setting.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
interface.py(这里面都是接口相关的代码):
import flask,jsonfrom . import tools #从当前位置引用toolsserver = flask.Flask(__name__)@server.route('/table_data')def get_table_data(): table_name = flask.request.args.get('table_name') limit = flask.request.args.get('limit','10') if not table_name: return json.dumps({'msg':'table_name是必填字段'},ensure_ascii=False) if limit.isdigit(): sql = 'select * from %s limit %s;' % (table_name, limit) else: return json.dumps({'mgs':'limit请传入一个整数'},ensure_ascii=False) if table_name not in ['app_myuser','dsk_test','app_student','app_product']: return json.dumps({'msg':'没有权限获取该表数据'},ensure_ascii=False) resault = tools.op_mysql(sql) return json.dumps(resault,ensure_ascii=False)@server.route('/add_mem',methods=['post'])def add_mem(): username = flask.request.json.get('username') password = flask.request.json.get('password') if username and password: sql = 'select * from app_myuser where username = "%s";'%username if tools.op_mysql(sql): data = {'msg':'用户已存在'} else: new_password = tools.md5(password) insert_sql = 'insert into app_myuser (username,passwd) values ("%s","%s");'%(username,new_password) tools.op_mysql(insert_sql) data = {'msg':'用户添加成功'} else: data = {'msg':'必填参数未填,请查看接口问题'} return json.dumps(data,ensure_ascii=False)
main.py(这里是程序的入口):
import sysimport osBASE_PATH = os.path.dirname(os.path.abspath(__file__)) #获取当前文件的父目录的绝对路径sys.path.insert(0,BASE_PATH) #将上面取到的路径添加到系统PAHT变量里面from lib.interface import server #导入lib文件夹里interface里的server方法from config.setting import server_info #导入config文件夹下setting里的server_info变量server.run(**server_info)
最后还有一个read.txt,这里面存放的是整个工程的说明:
#这个程序是写xxx接口的入库是main.pyconfig下是配置文件lib是程序的主逻辑在这里面
还有一个log文件夹未使用,待续。