您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用python实现接口的方法

5b51 2022/1/14 8:16:52 python 字数 23410 阅读 315 来源 www.jb51.cc/python

接口基础知识: 简单说下接口测试,现在常用的2种接口就是httpapi和rpc协议的接口,今天主要说:httpapi接口是走http协议通过路径来区分调用的方法,请求报文格式都是key-value形式,返回报文一般是json串;

概述

接口基础知识:

简单说下接口测试,现在常用的2种接口就是http api和rpc协议的接口,今天主要说:http api接口是走http协议通过路径来区分调用方法,请求报文格式都是key-value形式,返回报文一般是json串;

接口协议:http、webservice、rpc等。

请求方式:get、post方式

请求参数格式:

  a. get请求都是通过url?param=xxx&param1=xxx

  b. post请求的请求参数常用类型有:application/json、application/x-www-form-urlencoded、multipart/form-data、text/html等。

还需要知道接口的url、参数类型、返回结果的数据格式、了解接口是否有header、cookie等信息。 

接口的实现:请求方式-get,接口的写法:

 import flask
 from flask import request
 from flask import jsonify
 import tools
 import OP_db
 import settings
 '''
 flask: web框架,可以通过flask提供的装饰器@server.route()将普通函数转换为服务
 登录接口,需要传url、username、passwd
 '''
 #创建一个服务,把当前这个python文件当做一个服务
 server = flask.Flask(__name__)
 #server.config['JSON_AS_ASCII'] = False
 
 # @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
 @server.route('/login',methods=['get'])
 def login():
  # 获取通过url请求传参的数据
  username = request.values.get('name')
  # 获取url请求传的密码,明文
  pwd = request.values.get('pwd')
  # 判断用户名、密码都不为空,如果不传用户名、密码则username和pwd为None
  if username and pwd:
   # 获取加密后的密码
   password = tools.md5_pwd(pwd)
   #执行sql,如果查询的username和password不为空,说明数据库存在admin的账号
   sql = 'select name,password from test where name= "%s" and password= "%s";' %(username,password)
   # 从数据查询结果后,res返回是元组
   res = OP_db.getconn(
    host=settings.MysqL_info['host'],user=settings.MysqL_info['user'],passwd=settings.MysqL_info['pwd'],db=settings.MysqL_info['db'],port=settings.MysqL_info['port'],sql=sql
   )
   if res:  #res的结果不为空,说明找到了username=admin的用户,且password为加密前的123456
    resu = {'code': 200,'message': '登录成功'}
    return jsonify(resu) #将字典转换为json串,json是字符串
   else:
    resu = {'code': -1,'message': '账号/密码错误'}
    return jsonify(resu)
  else:
   res = {'code': 999,'message': '必填参数未填写'}
   return jsonify(res)
 
 if __name__ == '__main__':
  server.run(debug=True,port=8888,host=0.0.0.0) #指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问

get访问接口:

项目启动后,接口的地址是:http://127.0.0.1:5000/,认端口是5000。

打开浏览器,输入urlhttp://127.0.0.1:5000/xxx?name=xxx&pwd=123456,后面跟上接口的地址login,参数跟url直接使用?相连,每个请求参数直接使用&相连。请求成功,则返回{'code': 200,'message': '登录成功'}。

 请求方式-post,接口的写法:

 import flask
 from flask import jsonify
 from flask import request
 from conf import opMysqL
 from conf import md5_create
 '''
 注册接口:
 post请求,请求参数入参类型json
 {
  "username":"aaa","pwd":"123456","c_pwd":"123456"
 }
 '''
 server = flask.Flask(__name__)
 @server.route('/register',methods=['get','post'])
 def registerPost():
  #判断接口的请求方式是GET还是POST
  if request.method == 'POST':
   # 获取请求参数是json格式,返回结果是字典
   params = request.json
   username = params.get('username')
   pwd = params.get('pwd')
   confirmpwd = params.get('confirmpwd')
   if username and pwd and confirmpwd: # 判断输入的用户名、密码、确认密码都不为空
    select_sql = 'select username from lhldemo where username = "%s" ;'%username
    # 查询注册用户是否存在数据库,如果存在,则username不为空,否则username为空
    res_MysqL = opMysqL.op_select(select_sql)
    if res_MysqL:
     return jsonify({"code": 999,"mesg": "用户注册"})
    else:
     if pwd == confirmpwd: # 判断pwd和confirmpwd一致
      new_pwd = md5_create.md5_test(pwd) # 加密后的密码
      insert_sql = 'insert into lhldemo(username,password) values("%s","%s") ;' % (username,new_pwd)
      opMysqL.op_insert(insert_sql)
      return jsonify({"code": 200,"msg": "注册成功"})
     else:
      return jsonify({"code":998,"msg":"密码不一样"})
   else:
    return jsonify({"code": 504,"msg": "必填项不能为空"})
  else:
   return jsonify({"code": 201,"msg": "请求方式不正确"})
 
 if __name__ == '__main__':
  #port可以指定端口,认端口是5000
  #host写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,认是127.0.0.1
  server.run(debug=True,port=8899,host='0.0.0.0')

项目启动后,接口的地址是:http://127.0.0.1:5000/,认端口是5000。

打开浏览器,输入urlhttp://127.0.0.1:5000/xxx,后面跟上接口的地址register,参数使用postman或jmeter进行请求,参数类型是json。请求成功,则返回{'code': 200,'message': '登录成功'}。

请求方式-get、post都可以访问,写法如下:

 import flask
 from flask import jsonify
 from flask import request
 from conf import opMysqL
 from conf import md5_create
 '''
 注册接口:
 post请求,请求参数入参类型json
 {
  "username":"aaa",'post'])
 def registerPost():
  #post请求获取请求的参数,返回结果类型是str
  username = request.values.get('username')
  pwd = request.values.get('pwd')
  confirmpwd = request.values.get('confirmpwd')
  if username and pwd and confirmpwd: # 判断输入的用户名、密码、确认密码都不为空
   select_sql = 'select username from lhldemo where username = "%s" ;'%username
   # 查询注册用户是否存在数据库,如果存在,则username不为空,否则username为空
   res_MysqL = opMysqL.op_select(select_sql)
   if res_MysqL:
    return jsonify({"code": 999,"mesg": "用户注册"})
   else:
    if pwd == confirmpwd: # 判断pwd和confirmpwd一致
     new_pwd = md5_create.md5_test(pwd) # 加密后的密码
     insert_sql = 'insert into lhldemo(username,new_pwd)
     opMysqL.op_insert(insert_sql)
     return jsonify({"code": 200,"msg": "注册成功"})
    else:
     return jsonify({"code": 998,"msg": "密码不一样"})
  else:
   return jsonify({"code": 504,"msg": "必填项不能为空"})
 
 
 if __name__ == '__main__':
  #port可以指定端口,认端口是5000
  #host认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
  server.run(debug=True,host='0.0.0.0')

通过url拼接参数:

第二种访问方式:通过key-value方式进行访问:

 redis相关操作,添加hash类型的值到redis内,接口实现如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from flask import request
 '''
 redis添加数据,存入数据的类型是hash类型,格式如下:
 post请求,请求参数入参类型json
 {name:{"key":"value"}}
 {"username":"url"}
 '''
 server = flask.Flask(__name__)
 @server.route('/set_sties',methods =['post'])
 def set_sties():
  # 获取url请求参数,返回结果是字典{"username":"byz","url":"http://www.baidu.com"}
  res_dic = request.json
  if res_dic.get('username') and res_dic.get('url'):
   username = res_dic.get('username')
   url = res_dic.get('url')
   #调用redis的hset方法,将username、url存入redis
   opRedis.get_hashall('sites',username,url)
   return jsonify({"code":20})
  else:
   return jsonify({"code": 204,"msg": "必填项不能为空"})
 
 if __name__ == '__main__':
  #port可以指定端口,认端口是5000
  #host认是127.0.0.1,host='0.0.0.0')

{name:{key,value}},接口访问成功后,redis内数据存储结构如下:

redis添加完数据后,读取redis内的数据,接口实现如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from flask import request
 '''
 读取redis内的数据,redis数据存储类型是hash类型,格式如下
 {name:{"key":"value"}}
 思路: 1.通过redis的hgetall(name)方法读取redis所有数据,返回结果类型是字典
  2. 循环字典内容,将元素类型转换为str,并将结果存放到字典内
 '''
 server = flask.Flask(__name__)
 @server.route('/get_sties',methods =['get','post'])
 def get_sties():
  #获取redis内所有的数据信息,返回结果类型是字典,里面元素是bytes类型,name=sites
  dic = opRedis.get_hashall('sites')
  redisList = []
  for key,value in dic.items():
   redis_dic = {}
   #将字典内元素的类型由bytes转换为str
   k = key.decode()
   v = value.decode()
   #字典redis_dic内结构{"username:k,"url":v}
   redis_dic['username'] = k
   redis_dic['url'] = v
   redisList.append(redis_dic)
  return jsonify({"code": 200,"msg": redisList})
 
 if __name__ == '__main__':
  #port可以指定端口,认端口是5000
  #host认是127.0.0.1,host='0.0.0.0')

 查询用户,需要传token值,实现方法如下:

登录接口:

 import flask
 from flask import jsonify
 from conf import opRedis
 from conf import opMysqL
 from conf import md5_create
 from flask import request
 import time
 '''
 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
 '''
 server = flask.Flask(__name__)
 @server.route('/login','post'])
 def set_cookies():
  name = request.values.get('username')
  pwd = request.values.get('pwd')
  if name and pwd:
   #加密后的密码
   new_pwd = md5_create.md5_test(pwd)
   sql = 'select username,password from lhldemo where username="%s" and password="%s" ; ' % (name,new_pwd)
   res_sql = opMysqL.op_select(sql)
   if res_sql:
    token = name + time.strftime('%Y%m%d%H%M%s')
    new_token = md5_create.md5_test(token)
    #用户登录成功后,将name和token存入redis,存入数据类型是hash类型
    opRedis.get_hashall('user',name,new_token)
    return jsonify({"code": 200})
   else:
    return jsonify({"code": 204})
  else:
   return jsonify({"code": 304})

 查询用户,需要传用户名和token值,实现方法如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from conf import opMysqL
 from conf import md5_create
 from flask import request
 import time
 '''
 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
 '''
 server = flask.Flask(__name__)
 @server.route('/search_user','post'])
 def set_cookies():
  name = request.values.get('username')
  token = request.values.get('token')
  print('token',token)
  if name and token:
   #查看数据库,看查询用户是否存在,若存在则返回用户id
   sql = 'select id from lhldemo where username="%s" ; ' % (name)
   res_sql = opMysqL.op_select(sql)
   if res_sql:
    #从redis中获取user下的用户名对应的token值
    res_token = opRedis.getRedis('user:'+name)26    if res_token == token:
     return jsonify({"msg": "用户id","id": res_sql})
    else:
     return jsonify({"msg": "token错误"})
   else:
    return jsonify({"code": "用户不存在"})
  else:
   return jsonify({"code": "必填项不能为空"})
 
 if __name__ == '__main__':
  #port可以指定端口,认端口是5000
  #host认是127.0.0.1,host='0.0.0.0')

 

总结

以上是编程之家为你收集整理的使用python实现接口的方法全部内容,希望文章能够帮你解决使用python实现接口的方法所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶