flask一个接口案例
脚本案例:
#!/usr/bin/python # -*- coding: UTF-8 -*- import re import time # 注册接口 import flask import pymysql from flask import request, jsonify # 想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) # 把这个python文件当做一个web服务 def get_conn(): return pymysql.connect(host='192.168.20.187', user='root', password='', db='dalan', charset='utf8') # 数据查询 def _select(sql, data=()): conn = get_conn() # 获取操作游标 with conn.cursor() as cursor: cursor.execute(sql, data) # 执行sql res = cursor.fetchone() # 获取查询结果 server.logger.info(res) # 记录日志 conn.commit() # 提交到数据库执行 conn.close() # 关闭数据库连接 return res #更新数据 def _update(sql, data=()): conn = get_conn() with conn.cursor() as cursor: # 执行sql res = cursor.execute(sql, data) conn.commit() conn.close() return res # 数据写入 def _insert(sql, data=()): conn = get_conn() with conn.cursor() as cursor: # 执行sql res = cursor.execute(sql, data) conn.commit() conn.close() return res # 响应 def respond(flag, code, msg='',user_id='null',user_name='null'): ret = { 'code': code, 'status': flag, 'msg': msg, 'user_id':user_id, 'user_name':user_name } server.logger.info(ret)#日志记录响应结果 return jsonify(ret) @server.route('/districtdervice', methods=['post']) # router里面第一个参数,是接口的路径 def reg(): if request.values.get('apk_link') and request.values.get('original_id') and request.values.get('pkg_id') and request.values.get('service_name') and request.values.get('service_time') and request.values.get('service_status'): _apk_link = request.values.get('apk_link') # 这里就是你调用接口的是传入的参数 _original_id=request.values.get('original_id') _pkg_id=request.values.get('pkg_id') _service_name=request.values.get('service_name') _service_time = request.values.get('service_time') _service_status=request.values.get('service_status') _novice= request.values.get('novice') server.logger.info("districtdervice_request all data: {}".format(request.form.to_dict()))#获取请求提交数据 server.logger.info("districtdervice_request url: {}".format(request.url))#记录请求url if _apk_link is None: server.logger.info("districtdervice request address is None") return respond(True, 500, msg='地址不合法') # 判断传参是否合法 if re.match(r'^https?:/{2}.+$', _apk_link) is None: server.logger.info("districtdervice request Illegal parameter")#记录请求参数不合法 return respond(True, 500, msg='地址不合法') if _apk_link: try: sql = "select apk_link,creation_time from districtdervice_task where apk_link=%s" res = _select(sql, (_apk_link,)) # 执行sql server.logger.info(res) # 把查询结果写入日志 if res: server.logger.info("user exist") sql="update districtdervice_task set original_id=%s,pkg_id=%s,service_name=%s,service_time=%s where apk_link=%s" _update(sql, (_original_id,_pkg_id,_service_name,_service_time,_apk_link)) # 执行sql return respond(True, 300, msg='推荐服渠道更新成功') else: date_time = time.strftime("%Y-%m-%d %H:%M:%S") if _novice is None: sql = "insert into districtdervice_task(apk_link,original_id,pkg_id,service_name,service_time,service_status,creation_time) values(%s, %s,%s,%s, %s,%s,%s)" _insert(sql, (_apk_link, _original_id,_pkg_id,_service_name,_service_time,_service_status,date_time))#插入数据库 else: print('999999999999') sql = "insert into districtdervice_task(apk_link,original_id,pkg_id,service_name,service_time,service_status,creation_time,novice) values(%s, %s,%s,%s, %s,%s,%s,%s)" _insert(sql, (_apk_link, _original_id,_pkg_id,_service_name,_service_time,_service_status,date_time,_novice))#插入数据库 server.logger.info("register success") return respond(True, 200, msg=" 推荐服渠道包上传成功!") except: server.logger.info("handle error") return respond(False, 500, msg="异常!") else: return respond(False, 416, msg="必填参数未填,请看接口文档!") if __name__ == '__main__': server.run(port=8000, debug=True, host='0.0.0.0')
简单接口示例:
#!/usr/bin/env python # encoding: utf-8 import flask from flask import request, jsonify # 想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) # 把这个python文件当做一个web服务 # 响应 def respond(flag, code, _method,msg=''): ret = { 'code': code, 'status': flag, 'msg': msg, 'method':_method } server.logger.info(ret)#日志记录响应结果 return jsonify(ret) @server.route('/subcontract', methods=['post']) # 接口的路径 def add_subcontract(): if request.method=='POST': game_id=request.args['game_id'] print(game_id) return respond(True, 200, 'POST',msg="渠道包上传成功!") else: return respond(True, 200, 'GET',msg="请求方式不正确") if __name__ == '__main__': server.run(port=8000, debug=True, host='0.0.0.0',threaded=True)
自学接口案例:
1.接口文档
接口脚本:
#!/usr/bin/env python # encoding: utf-8 #_______________________________________________________________________________获取学生成绩_________________________________________________________________________ import flask from flask import request, jsonify # 想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) # 把这个python文件当做一个web服务 # 响应 def respond(flag, code, _method,msg=''): ret = { 'code': code, 'status': flag, 'msg': msg, 'method':_method } server.logger.info(ret)#日志记录响应结果 return jsonify(ret) #jsonify返回json数据格式 @server.route('/student/get_achievement', methods=['post']) # 接口的路径 def add_subcontract(): qu_json=request.get_json() print(qu_json) if qu_json['user_id'] and qu_json['name'] and qu_json['time_stamp'] and qu_json['grade'] and qu_json['family']: ret={ "user_id": "202108110", "name": "张三", "age": "16", "height": "156cm", "grade": "5", "is_no": "no", "family": "science", "achievement": { "chinese": "86", "mathematics": "105", "english": "92", "physics": "65", "chemistry": "66" }, "count": { "age": "75", "comt": "586" } } return respond('success', 200, 'POST',ret) if __name__ == '__main__': server.run(port=8000, debug=True, host='0.0.0.0')