接口开发

接口开发

flask是一个轻量级的接口开发模块,在进行接口开发之前需要先安装flask模块,安装命令如下:

pip install flask

下面是flask用法介绍

import flask,json

server = 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 = '<h1><a href="http://www.baidu.com">点</a></h1> <input />' \
          '<button>点我!! </button>'
    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,pymysql
from 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,json
from . import tools #从当前位置引用tools

server = 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 sys
import os

BASE_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.py

config下是配置文件

lib是程序的主逻辑在这里面

还有一个log文件夹未使用,待续。

posted @ 2019-05-23 20:01  狂爷  阅读(314)  评论(0编辑  收藏  举报