登录  /  注册

python中接口的实现实例

零下一度
发布: 2018-05-22 16:27:05
原创
20816人浏览过

接口基础知识:

简单说下接口测试,现在常用的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,接口的写法:

 1 import flask 
 2 from flask import request 
 3 from flask import jsonify 
 4 import tools 
 5 import OP_db 
 6 import settings 
 7 ''' 
 8 flask: web框架,可以通过flask提供的装饰器@server.route()将普通函数转换为服务 
 9 登录接口,需要传url、username、passwd
 10 '''
 11 #创建一个服务,把当前这个<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15730.html" target="_blank">python</a>文件当做一个服务
 12 server = flask.Flask(__name__)
 13 #server.config[&#39;JSON_AS_ASCII&#39;] = False
 14 
 15 # @server.route()可以将普通函数转变为服务  登录接口的路径、请求方式
 16 @server.route(&#39;/login&#39;, methods=[&#39;get&#39;])
 17 def login():
 18     # 获取通过url请求传参的数据19     username = request.values.get(&#39;name&#39;)
 20     # 获取url请求传的密码,明文
 21     pwd = request.values.get(&#39;pwd&#39;)
 22     # 判断用户名、密码都不为空,如果不传用户名、密码则username和pwd为None
 23     if username and pwd:
 24         # 获取加密后的密码
 25         password = tools.md5_pwd(pwd)
 26         #执行sql,如果查询的username和password不为空,说明数据库存在admin的账号
 27         sql = &#39;select name,password from test where name= "%s" and password= "%s";&#39; %(username, password)
 28         # 从数据查询结果后,res返回是元组
 29         res = OP_db.getconn(
 30             host=settings.mysql_info[&#39;host&#39;],
 31             user=settings.mysql_info[&#39;user&#39;],
 32             passwd=settings.mysql_info[&#39;pwd&#39;],
 33             db=settings.mysql_info[&#39;db&#39;],
 34             port=settings.mysql_info[&#39;port&#39;],
 35             sql=sql
 36         )
 37         if res:      #res的结果不为空,说明找到了username=admin的用户,且password为加密前的123456
 38             resu = {&#39;code&#39;: 200, &#39;message&#39;: &#39;登录成功&#39;}
 39             return jsonify(resu) #将字典转换为json串, json是字符串
 40         else:
 41             resu = {&#39;code&#39;: -1, &#39;message&#39;: &#39;账号/密码错误&#39;}
 42             return jsonify(resu)
 43     else:
 44         res = {&#39;code&#39;: 999, &#39;message&#39;: &#39;必填参数未填写&#39;}
 45         return jsonify(res)
 46 
 47 if __name__ == &#39;__main__&#39;:
 48       server.run(debug=True, port=8888, host=0.0.0.0)  #指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问
登录后复制

md5加密、数据库mysql的操作详见我的其他博客~~~~~

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,接口的写法:

 1 import flask 
 2 from flask import jsonify 
 3 from flask import request 
 4 from conf import opMysql 
 5 from conf import md5_create 
 6 &#39;&#39;&#39; 
 7 注册接口: 
 8 post请求,请求参数入参类型json 
 9 {
 10     "username":"aaa",
 11     "pwd":"123456",
 12     "c_pwd":"123456"
 13 }
 14 &#39;&#39;&#39;
 15 server = flask.Flask(__name__)
 16 @server.route(&#39;/register&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])
 17 def registerPost():
 18     #判断接口的请求方式是GET还是POST
 19     if request.method == &#39;POST&#39;:
 20         # 获取请求参数是json格式,返回结果是字典
 21         params = request.json
 22         username = params.get(&#39;username&#39;)
 23         pwd = params.get(&#39;pwd&#39;)
 24         confirmpwd = params.get(&#39;confirmpwd&#39;)
 25         if username and pwd and confirmpwd:  # 判断输入的用户名、密码、确认密码都不为空
 26             select_sql = &#39;select username from lhldemo  where username = "%s" ;&#39;%username
 27             # 查询注册的用户是否存在数据库,如果存在,则username不为空,否则username为空
 28             res_mysql = opMysql.op_select(select_sql)
 29             if res_mysql:
 30                 return jsonify({"code": 999, "mesg": "用户已注册"})
 31             else:
 32                 if pwd == confirmpwd:  # 判断pwd和confirmpwd一致
 33                     new_pwd = md5_create.md5_test(pwd)  # 加密后的密码
 34                     insert_sql = &#39;insert into lhldemo(username,password) values("%s", "%s") ;&#39; % (username, new_pwd)
 35                     opMysql.op_insert(insert_sql)
 36                     return jsonify({"code": 200, "msg": "注册成功"})
 37                 else:
 38                     return jsonify({"code":998, "msg":"密码不一样"})
 39         else:
 40             return jsonify({"code": 504, "msg": "必填项不能为空"})
 41     else:
 42         return jsonify({"code": 201, "msg": "请求方式不正确"})
 43 
 44 if __name__ == &#39;__main__&#39;:
 45     #port可以指定端口,默认端口是5000
 46     #host写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,默认是127.0.0.1
 47     server.run(debug=True, port=8899, host=&#39;0.0.0.0&#39;)
登录后复制

post访问接口:

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

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

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

 1 import flask 
 2 from flask import jsonify 
 3 from flask import request 
 4 from conf import opMysql 
 5 from conf import md5_create 
 6 &#39;&#39;&#39; 
 7 注册接口: 
 8 post请求,请求参数入参类型json 
 9 {
 10     "username":"aaa",
 11     "pwd":"123456",
 12     "c_pwd":"123456"
 13 }
 14 &#39;&#39;&#39;
 15 server = flask.Flask(__name__)
 16 @server.route(&#39;/register&#39;, methods=[&#39;get&#39;, &#39;post&#39;])
 17 def registerPost():
 18     #post请求获取请求的参数,返回结果类型是str
 19     username = request.values.get(&#39;username&#39;)
 20     pwd = request.values.get(&#39;pwd&#39;)
 21     confirmpwd = request.values.get(&#39;confirmpwd&#39;)
 22     if username and pwd and confirmpwd:  # 判断输入的用户名、密码、确认密码都不为空
 23         select_sql = &#39;select username from lhldemo  where username = "%s" ;&#39;%username
 24         # 查询注册的用户是否存在数据库,如果存在,则username不为空,否则username为空
 25         res_mysql = opMysql.op_select(select_sql)
 26         if res_mysql:
 27             return jsonify({"code": 999, "mesg": "用户已注册"})
 28         else:
 29             if pwd == confirmpwd:  # 判断pwd和confirmpwd一致
 30                 new_pwd = md5_create.md5_test(pwd)  # 加密后的密码
 31                 insert_sql = &#39;insert into lhldemo(username,password) values("%s", "%s") ;&#39; % (username, new_pwd)
 32                 opMysql.op_insert(insert_sql)
 33                 return jsonify({"code": 200, "msg": "注册成功"})
 34             else:
 35                 return jsonify({"code": 998, "msg": "密码不一样"})
 36     else:
 37         return jsonify({"code": 504, "msg": "必填项不能为空"})
 38 
 39 
 40 if __name__ == &#39;__main__&#39;:
 41     #port可以指定端口,默认端口是5000
 42     #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
 43     server.run(debug=True, port=8899, host=&#39;0.0.0.0&#39;)
登录后复制

可以通过以下2种方式进行post请求,一种如下:

通过url拼接参数:

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

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

 1 import flask 
 2 from flask import jsonify 
 3 from conf import opRedis 
 4 from flask import request 
 5 &#39;&#39;&#39; 
 6 redis添加数据,存入数据的类型是hash类型,格式如下: 
 7 post请求,请求参数入参类型json 
 8 {name:{"key":"value"}} 
 9 {"username":"url"}
 10 &#39;&#39;&#39;
 11 server = flask.Flask(__name__)
 12 @server.route(&#39;/set_sties&#39;, methods =[&#39;post&#39;])
 13 def set_sties():
 14     # 获取url请求参数,返回结果是字典{"username":"byz","url":"http://www.baidu.com"}
 15     res_dic = request.json
 16     if res_dic.get(&#39;username&#39;) and res_dic.get(&#39;url&#39;):
 17         username = res_dic.get(&#39;username&#39;)
 18         url = res_dic.get(&#39;url&#39;)
 19         #调用redis的hset方法,将username、url存入redis
 20         opRedis.get_hashall(&#39;sites&#39;, username, url)
 21         return jsonify({"code":20})
 22     else:
 23         return jsonify({"code": 204, "msg": "必填项不能为空"})
 24 
 25 if __name__ == &#39;__main__&#39;:
 26     #port可以指定端口,默认端口是5000
 27     #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
 28     server.run(debug=True, port=8899, host=&#39;0.0.0.0&#39;)
登录后复制
hash类型结构如下:

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

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

 1 import flask 
 2 from flask import jsonify 
 3 from conf import opRedis 
 4 from flask import request 
 5 &#39;&#39;&#39; 
 6 读取redis内的数据,redis数据存储类型是hash类型,格式如下 
 7 {name:{"key":"value"}} 
 8 思路: 1.通过redis的hgetall(name)方法读取redis所有数据,返回结果类型是字典 
 9        2. 循环字典内容,将元素类型转换为str,并将结果存放到字典内
 10 &#39;&#39;&#39;
 11 server = flask.Flask(__name__)
 12 @server.route(&#39;/get_sties&#39;, methods =[&#39;get&#39;, &#39;post&#39;])
 13 def get_sties():
 14     #获取redis内所有的数据信息,返回结果类型是字典,里面元素是bytes类型,name=sites
 15     dic = opRedis.get_hashall(&#39;sites&#39;)
 16     redisList = []
 17     for key, value in dic.items():
 18         redis_dic = {}
 19         #将字典内元素的类型由bytes转换为str
 20         k = key.decode()
 21         v = value.decode()
 22         #字典redis_dic内结构{"username:k, "url":v}
 23         redis_dic[&#39;username&#39;] = k
 24         redis_dic[&#39;url&#39;] = v
 25         redisList.append(redis_dic)
 26     return jsonify({"code": 200, "msg": redisList})
 27 
 28 if __name__ == &#39;__main__&#39;:
 29     #port可以指定端口,默认端口是5000
 30     #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
 31     server.run(debug=True, port=8899, host=&#39;0.0.0.0&#39;)
登录后复制

通过postman方法接口,返回数据如下:

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

登录接口:

 1 import flask 
 2 from flask import jsonify 
 3 from conf import opRedis 
 4 from conf import opMysql 
 5 from conf import md5_create 
 6 from flask import request 
 7 import time
 8 &#39;&#39;&#39; 
 9 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
 10 &#39;&#39;&#39;
 11 server = flask.Flask(__name__)
 12 @server.route(&#39;/login&#39;, methods=[&#39;get&#39;,&#39;post&#39;])
 13 def set_cookies():
 14     name = request.values.get(&#39;username&#39;)
 15     pwd = request.values.get(&#39;pwd&#39;)
 16     if name and pwd:17         #加密后的密码
 18         new_pwd = md5_create.md5_test(pwd)
 19         sql = &#39;select username,password from lhldemo where username="%s" and password="%s" ; &#39; % (name, new_pwd)
 20         res_sql = opMysql.op_select(sql)
 21         if res_sql:
 22             token = name + time.strftime(&#39;%Y%m%d%H%M%S&#39;)
 23             new_token = md5_create.md5_test(token)
 24             #用户登录成功后,将name和token存入redis,存入数据类型是hash类型
 25             opRedis.get_hashall(&#39;user&#39;, name, new_token)
 26             return jsonify({"code": 200})
 27         else:
 28             return jsonify({"code": 204})
 29     else:
 30         return jsonify({"code": 304})
登录后复制

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

 1 import flask 
 2 from flask import jsonify 
 3 from conf import opRedis 
 4 from conf import opMysql 
 5 from conf import md5_create 
 6 from flask import request 
 7 import time 
 8 &#39;&#39;&#39; 
 9 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内
 10 &#39;&#39;&#39;
 11 server = flask.Flask(__name__)
 12 @server.route(&#39;/search_user&#39;, methods=[&#39;get&#39;,&#39;post&#39;])
 13 def set_cookies():
 14     name = request.values.get(&#39;username&#39;)
 15     token = request.values.get(&#39;token&#39;)
 16     print(&#39;token&#39;,token)
 17     if name and token:
 18         #查看数据库,看查询的用户是否存在,若存在则返回用户id
 19         sql = &#39;select id from lhldemo where username="%s" ; &#39; % (name)
 20         res_sql = opMysql.op_select(sql)
 21         if res_sql:
 22             #从redis中获取user下的用户名对应的token值
 23             res_token = opRedis.getRedis(&#39;user:&#39;+name)
 26             if res_token == token:
 27                 return jsonify({"msg": "用户id", "id": res_sql})
 28             else:
 29                 return jsonify({"msg": "token错误"})
 30         else:
 31             return jsonify({"code": "用户不存在"})
 32     else:
 33         return jsonify({"code": "必填项不能为空"})
 34 
 35 if __name__ == &#39;__main__&#39;:
 36     #port可以指定端口,默认端口是5000
 37     #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
 38     server.run(debug=True, port=8899, host=&#39;0.0.0.0&#39;)
登录后复制

 以上就是工作中常用的一些接口场景,测试支付相关接口、或者第三方接口时,可以自己mock接口返回假数据操作~~~~

以上就是python中接口的实现实例的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号