python实现自定义接口

一、开发接口的作用

  1、mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功、支付失败。

  2、了解接口是如何实现的:数据交互、数据返回

  3、开发给别人查看数据,避免其他人直接操作、查看数据库

二、 flask

flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务。本文就用flask来开发一个接口。

flask需要先安装再引用。pip install flask

用flask开发接口的流程为:

1、定义一个server

server=flask.Flask(__name__) #__name__代表当前的python文件。把当前的python文件当做一个服务启动

2、然后定义接口函数,一般函数和接口函数的区别在于,定义为接口的函数上方要特别加上装饰器:

@server.route('/index',methods=['get','post']) #第一个参数就是路径,第二个参数支持的请求方式,不写的话默认是get,也可以指定一个

@server.route('/index',methods=['get','post'])#第一个参数就是路径,第二个参数支持的请求方式,不写的话默认是get
def index():
    res={'msg':'这是我开发的第一个接口','msg_code':0}
    return json.dumps(res,ensure_ascii=False)#转成字符串类型

三、接口开发的步骤

  1、实例化server

  2、将装饰器下面的函数变为一个接口

  3、启动服务

  简单的接口开发示例:

import flask,json
server = flask.Flask(__name__)           # 实例化server,把当前这个python文件当作一个服务,__name__代表当前这个python文件
@server.route('/index',methods=['get'])  # 'index'是接口路径,如methods不写,则默认get请求
# 装饰器,下面的函数变为一个接口
def index():
    res = {'msg':'这是我开发的第一个接口','msg_code':'0000'}
    return json.dumps(res,ensure_ascii=False)
    # json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False

server.run(port=8888,debug=True,host='0.0.0.0')  # 启动服务;端口不写默认是5000,也可以自定义,但注意不要与机器上已占用的port起冲突,
# debug=True,改了代码后,不用重启,它会自动加载重启
# 'host='0.0.0.0'同一局域网下,别人可以通过IP访问
# 最终这个接口的访问地址就是  http://127.0.0.1/index  ,get方法。返回数据是json格式res内容

接口访问中,经常会需要输入参数。那么如果要接受传入的参数,则可用以下方法:

username=flask.request.values.get('username')

  示例:开发一个登录接口

import flask
import tools #自己写的py,里面写了一些下面需要调用的函数
import json
server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务

#开发一个登录接口
@server.route('/login',methods=['get'])
def login():
    uname = flask.request.values.get('username')
    pd = flask.request.values.get('passwd')
    sql = 'select * from app_myuser where username="%s"'%uname
    res = tools.my_db(sql) #tools里的函数:连接数据库,执行sql并返回结果
    if res:
        if tools.my_md5(pd) == res.get('passwd'): #tools里的函数,加密密码
            res = {"code":0,"msg":"登录成功!"}
        else:
            res = {"code":1,"msg":"密码错误!"}
    else:
        res = {'code':2,"msg":"用户不存在"}
    return json.dumps(res,ensure_ascii=False,indent=4) #输出json格式

server.run(host='127.0.0.1',port=8998,debug=True)#若别人访问这个接口,则host需要输入自己的ip地址,而不是127.0.0.1

#以上接口访问地址即:http://127.0.0.1:8998/login?username=usertest&passwd=123123

tools里面封装的函数如下:

import pymysql  #连接数据库,执行sql并返回sql执行结果
def my_db(sql):
    conn = pymysql.connect(host='127.0.0.1',user='xxx',password='123456',
                    db='db1',port=3306,charset='utf8',autocommit=True)
    cur = conn.cursor(pymysql.cursors.DictCursor)
    cur.execute(sql)
    res = cur.fetchone() #{'username':'test'}  {}
    cur.close()
    conn.close()
    return res

import hashlib
def my_md5(s,salt=''): #md5加密
    s = s+salt
    news = str(s).encode()
    m = hashlib.md5(news)
    return m.hexdigest()

if __name__ == '__main__':
    #判断如果是在别的文件里面导入这个python文件的话,就不执行下面的代码
    print(strTotimestamp())
    print(clean_log('.'))
    print(clean_log('.',2))