这里有新鲜出炉的Python教程,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功能。
接口基础知识:
简单说下接口测试,现在常用的2种接口就是http api和rpc协议的接口,今天主要说:http api接口是走http协议通过路径来区分调用的方法,请求报文格式都是key-value形式,返回报文一般是json串;
接口协议:http、webservice、rpc等。
请求方式:get、post方式
请求参数格式:
a. get请求都是通过url?param=xxx¶m1=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",
- "pwd":"123456",
- "c_pwd":"123456"
- }
- '''
- server = flask.Flask(__name__)
- @server.route('/register', methods=['get', '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,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": "必填项不能为空"})
- if __name__ == '__main__':
- #port可以指定端口,默认端口是5000
- #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
- server.run(debug=True, port=8899, 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,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
- server.run(debug=True, port=8899, 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,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
- server.run(debug=True, port=8899, 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', methods=['get','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', methods=['get','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,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,
- server.run(debug=True, port=8899, host='0.0.0.0')
来源: http://www.phperz.com/article/17/1027/351265.html