python3接口开发与数据库函数升级

+ python技术交流群,一起学习:819345479

Python3 接口开发与数据库函数升级

  在测试的过程中,往往会遇到功能受接口影响而导致测试无法正常进行,往往要等接口完成之后才能做功能测试,但这往往很托节奏。这个时候就可以考虑,将接口和功能剥离,分开测试,同时进行,保证项目进度。

  问题是怎么分开呢?要研发先帮忙开发接口、调试好,然后测试?显然太low,python这个时候就可以来装一波X,我们自己动手按照需求开发一套接口来供功能测试,其第三方模块flask提供接口服务,早就有大神开发好接口服务的第三方模块,我们直接用就可以了,这就是python的强大之处了,flask模块使用如下:

import flask  #导入模块
server=flask.Flask(__name__)  #创建接口服务,格式:flask.Flask(__name__),类似于redis.Redis,其中(__name__)是指当前的python文件,也就是说接口是基于此文档在运行
@server.route('/api',methods=['get','post'])#创建好接口服务后,需要指定路径,路径包含后缀以及请求方法,必须要是@装饰,下面的函数才能正常运行
def reg():#接口主体部分,运行内容
    return ('hello world!')
server.run(port=9999)#服务创建好,并指定好路径,接口内容编写完后,需要启动服务,启动的时候需要指定端口

  上面就是最简洁的接口服务了,运行后就可以访问了,在浏览器输入:http://127.0.0.1:9999/api,浏览器会输出:“hello world!”。但如果想要获取到用户的请求数据、以及局域网内别的测试人员要访问你的接口咋办,代码如下:

复制代码

import flask  #导入模块
from flask import request#导入request方法,用来接收传参
server=flask.Flask(__name__)  #创建接口服务,格式:flask.Flask(__name__),类似于redis.Redis,其中(__name__)是指当前的python文件,也就是说接口是基于此文档在运行
@server.route('/login',methods=['get','post'])#创建好接口服务后,需要指定路径,路径包含后缀以及请求方法,必须要是@装饰,下面的函数才能正常运行
def reg():#接口主体部分,运行内容
    name=request.values.get("username")#request.values.get("username")获取指定传参的value,用来判断、处理
    passwd=request.values.get("password")#如果传参是json类型,方法是request.json.get("username")
    if name and passwd:
        if name.strip() and passwd.strip():
            return '{"code":200,"msg":"注册成功!"}'
    return '{"code":300,"msg":"参数不能为空!"}'
server.run(port=9999,host='0.0.0.0',debug=True)#指定host为“0.0.0.0”后,局域网内其他IP就都可以访问了

复制代码

  上述代码基本可以满足接口需求了,然后你可以在接口主体内容内,对传参进行分析、处理,比如得到传参后,与数据库里的数据进行比对、分析,给出正确响应。譬如用户输入用户名和密码,取到参数后,查询数据库中是否存在用户名,且用户名密码是否正确,用来判断是否允许登录。既然如此那么我们要初始化一些数据了,就是在运行接口之前要判断数据库、表以及数据是否存在,不存在则需要初始化创建上述一系列数据,创建数据库的函数如下:

复制代码

 1 def oprate_sql(sql, HOST, USER, PASSWD, charset='utf8', port=3306):#定义操作sql语句的函数,如果是select或show则返回查询内容
 2     import pymysql
 3     conn = pymysql.connect(host=HOST, user=USER, password=PASSWD, charset=charset)
 4     cur = conn.cursor()
 5     cur.execute(sql)
 6     if sql.strip().startswith('select') or sql.strip().startswith('show'):
 7         res = cur.fetchall()
 8     else:
 9         conn.commit()
10         res = 'ok'
11     cur.close()
12     conn.close()
13     return res
14 
15 def check_in(args,res):#判断a,是否在res的元素里,这里的res必须是sql执行返回的数据,用于注册,登录
16     lis=[]
17     for i in res:
18         lis.append(i[0])
19     if args in lis:
20         return True
21 #调用:
22 sql='show databases;'
23 res=oprate_sql(sql, HOST, USER, PASSWD)
24 if not check_in(DBNAME, res):
25     sql = 'create database %s;' % DBNAME
26     oprate_sql(sql, HOST, USER, PASSWD)

复制代码

  可以看到,在连接数据库的时候不能指定数据库名称,因为不确定是否存在数据库,所以先查询当前数据库存在哪些数据库名,判断是否存在,不存在则建立数据库名,创建表类似。

  但是后面也还要操作数据库,比如增删改查,这些都要指定具体数据库名称才可以,那么久不能用上面的函数了,因为数据库名是必填参数,上述函数并没有,代码如下:

扫描二维码关注公众号,回复: 3050876 查看本文章

复制代码

 1 def oprate_sql(sql, HOST, USER, PASSWD, DBNAME, charset='utf8', port=3306):#定义操作sql语句的函数,如果是select或show则返回查询内容
 2     import pymysql
 3     conn = pymysql.connect(host=HOST, user=USER, password=PASSWD, db=DBNAME, charset=charset)
 4     cur = conn.cursor()
 5     cur.execute(sql)
 6     if sql.strip().startswith('select') or sql.strip().startswith('show'):
 7         res = cur.fetchall()
 8     else:
 9         conn.commit()
10         res = 'ok'
11     cur.close()
12     conn.close()
13     return res
14 #调用:
15 sql = 'select username from %s' % (USERTB)
16 res=oprate_sql(sql, HOST, USER, PASSWD,DBNAME)

复制代码

  那么问题来了,怎么合并这两个处理sql的函数呢,还记得我们函数有默认参数吧,我们把DBNAME默认为空字符,调用的时候传了DBNAME,那么我们就连接到具体的数据库名,如果调用的时候没有传DBNAME,那么我们就不连接数据库名,代码如下:

复制代码

 1 def oprate_sql(sql, HOST, USER, PASSWD, DBNAME='', charset='utf8', port=3306):#定义操作sql语句的函数,如果是select或show则返回查询内容
 2     import pymysql
 3     if DBNAME:
 4         conn = pymysql.connect(host=HOST, user=USER, password=PASSWD, db=DBNAME, charset=charset)
 5     else:
 6         conn = pymysql.connect(host=HOST, user=USER, password=PASSWD, charset=charset)
 7     cur = conn.cursor()
 8     cur.execute(sql)
 9     if sql.strip().startswith('select') or sql.strip().startswith('show'):
10         res = cur.fetchall()
11     else:
12         conn.commit()
13         res = 'ok'
14     cur.close()
15     conn.close()
16     return res
17 #不传DBNAME
18 sql='show databases;'
19 res=oprate_sql(sql, HOST, USER, PASSWD)
20 #传DBNAME:
21 sql = 'select username from %s' % (USERTB)
22 res=oprate_sql(sql, HOST, USER, PASSWD,DBNAME=Table_Name)

复制代码

  如上,这样就可以做到一个函数处理所有sql语句了。

 

 

转载自:https://www.cnblogs.com/znyyy/p/7832743.html

猜你喜欢

转载自blog.csdn.net/genius_man/article/details/79938393
今日推荐