7-4 python 接口开发(提供mock服务)
1、登录接口开发(数据存在数据库中) 接口开发做mock(模拟功能)
tools.py
import pymysql def my_db(sql): conn = pymysql.connect(host='xxx.xx.x.xx',user='jxz',password='123456', db='jxz',port=3306,charset='utf8',autocommit=True) cur = conn.cursor(pymysql.cursors.DictCursor) cur.execute(sql) res = cur.fetchone() #{'username':'nhy'} {} cur.close() conn.close() return res import hashlib def my_md5(s,salt=''): s = s+salt news = str(s).encode() m = hashlib.md5(news) return m.hexdigest()
import flask import tools import json server = flask.Flask(__name__) #新建一个服务,把当前这个python文件当做一个服务 # 装饰器 在参数中传入请求接口 路径 和 方法 # 也可以指定请求方法既可以是get方法也可以是post方法 methods=['get','post'] @server.route('/login',methods=['get']) def login(): # 定义一个登录的接口 uname = flask.request.values.get('username') # 从请求参数中获取请求参数 username pd = flask.request.values.get('passwd') # 从请求参数中获取请求参数 passwd # 从数据库中查询到输入的用户名的所有信息 sql = 'select * from app_myuser where username="%s"'%uname res = tools.my_db(sql) # 调用tools下的mysql函数,将sql传入进去,获取当前请求用户的一条信息 if res: # 判断如果返回该用户的信息,则执行下面的操作 # 1、判断用户密码是否正确 if tools.my_md5(pd) == res.get('passwd'): # 调用tools下的my_md5函数,将输入的密码进行加密后,跟数据库中返回的passwd密码进行对比 # 如果输入的密码加密后跟数据库中的秘密一直,提示登录成功 res = {"code":0,"msg":"登录成功!"} else: # 如果密码不一致,提示密码错误 res = {"code":1,"msg":"密码错误!"} else: # 如果数据库没有该用户的信息,告知用户不存在 res = {'code':2,"msg":"用户不存在"} return json.dumps(res,ensure_ascii=False,indent=4) # 将结果返回,因为res是从数据库中返回的元组列表格式 # 需要使用json.dumps将字典转成字符串json格式 # 启动一个服务,如果指定host = '127.0.0.1',则只能在本地访问 # 如果指定host = '0.0.0.0' 则只要是一个局域网内的所有电脑使用ip:port/路径都能访问此接口 # 指定启动服务的端口号,如果没有写端口号,则使用默认的端口号 # 指定参数debug=True 则增删改这个服务中的接口时不需要重新启动服务 # 注意:服务只能启动一次,启动多次会报错 server.run(host='0.0.0.0',port=8999,debug=True) #ip:8000/login #127.0.0.1
2、登录、注册接口开发(数据存在redis中)
import flask import tools import json,redis import random server = flask.Flask(__name__) #新建一个服务,把当前这个python文件当做一个服务 ip = '118.24.3.40' password='HK139bc&*' r = redis.Redis(host=ip,password=password,port=6379,db=10, decode_responses=True) # 连接redis @server.route('/login',methods=['get']) def login(): """ 登录接口 数据存在redis中 :return: 返回json格式的登录结果 """ uname = flask.request.values.get('username') pd = flask.request.values.get('passwd') # 定义一个key 'nhy:%s' %unmame key值为从外面输入的用户名,前面加 nhy: 表示在一个nhy的文件夹中 key='nhy:%s'%uname res = r.get(key) # 从redis中获取的输入的key的值 if res: # 判断如果存在用户名 res = json.loads(res) # 将从redis中获取到的值转换成字典 # 判断输入的密码加密后跟从redis中获取的密码一致 if tools.my_md5(pd) == res.get('passwd'): res = {"code":0,"msg":"登录成功!"} else: res = {"code":1,"msg":"密码错误!"} else: res = {'code':2,"msg":"用户不存在"} # 将返回的结果转换成json字符串格式 return json.dumps(res,ensure_ascii=False,indent=4) @server.route('/reg',methods=['post']) def reg(): """ 注册接口,将注册信息写入redis中 :return: 返回注册的信息 json格式 """ uname = flask.request.values.get('username') pd = flask.request.values.get('passwd') cpd = flask.request.values.get('cpwd') key='nhy:%s'%uname # 定义一个key res = r.get(key) # 获取redis中key的值 if res: # 判断用户是否存在 res = {'code': 2, "msg": "用户已存在"} else: # 用户不存在 md5_password = tools.my_md5(pd) # 调用tools中的my_md5函数将输入的密码进行加密 # 定义一个字典,需要存入redis中的value值 res = {'id':random.randint(100,9999),'username':uname,'passwd':md5_password,'is_admin':1} # 将值写入redis中,key为'nhy:%'%uname value值为:res 需要将res转换成json串 因为redis中只能存字符串格式 r.set('nhy:%s'%uname,json.dumps(res)) res = {"code":0,"msg":"注册成功!"} return json.dumps(res,ensure_ascii=False,indent=4) # 返回res 需要转成json格式 server.run(host='0.0.0.0', port=8999, debug=True)