博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口开发
阅读量:4317 次
发布时间:2019-06-06

本文共 5737 字,大约阅读时间需要 19 分钟。

接口开发

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文件中,各个工程或者项目会根据实际情况建立多个文件夹,分别存在配置信息,引用的函数,接口信息等,下面举例介绍:

  1. 先建立一个文件夹,如szz_api
  2. 这个文件夹下分别建立config、lib、log文件夹
  3. 建立main.py文件和read.txt文件
  4. config文件夹下建立setting.py文件
  5. 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文件夹未使用,待续。

转载于:https://www.cnblogs.com/meteor9/p/10914167.html

你可能感兴趣的文章
多线程 基本概念
查看>>
电报压缩/解压缩系统
查看>>
[UE4]C++ getter and setter
查看>>
[UE4]机器人射击逻辑行为树
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
Django学习笔记8
查看>>
cadence钻孔文件及光绘文件的生成
查看>>
css实现左右布局
查看>>
[Shader]一个shader效果啦(那个lost soul aside里面看到的)
查看>>
elasticsearch 中文API river
查看>>
Mac OS X 下搭建php开发环境
查看>>
Vue学习之vue中的计算属性和侦听器
查看>>
redis常见面试题
查看>>
C# - XML
查看>>
android权限大全
查看>>
BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
查看>>
[原]unity5 AssetBundle 加载
查看>>
[Day15]常用API(Object类、String类)
查看>>
[置顶] 各种流行的编程风格
查看>>
codeforces1029 E.Tree with Small Distances
查看>>