8-1 python 接口开发(提供数据、返回session_id)
1、接口开发,根据不同查询条件返回数据库查询结果
import flask import tools import json server = flask.Flask(__name__) #新建一个服务,把当前这个python文件当做一个服务 @server.route('/api/stu') def get_stu(): """ 获取学生信息接口 :return: 返回从数据库中查询到符合查询条件的信息 """ username = flask.request.values.get('name') # 默认get不到的话,返回的值就是None age = flask.request.values.get('age') if username and age: # 判断用户名和密码都存在 # 用户名和密码符合条件的 sql = "select * from app_student where name='%s' and age='%s'" % (username, age) elif not username and age: # 用户名为空,查询符合年龄条件的数据 sql = "select * from app_student where age='%s'" % age elif username and not age: # 年龄为空,查询符合用户名条件的数据 sql = "select * from app_student where name='%s'" % username else: # 没有搜索条件,默认返回所有数据 sql = "select * from app_student" res = tools.my_db2(sql) # 调用tools中的my_db2函数,执行sql语句,返回查询结果 # 返回执行结果,将结果转成json格式 return json.dumps(res,ensure_ascii=False,indent=4) server.run(host='0.0.0.0', port=8999, debug=True)
2、接口开发 返回session_id
import json import time import tools import flask server = flask.Flask(__name__) import nnlog # 1、导入第三方模块nnlog log = nnlog.Logger('book_server.log') # 添加一个日志文件 @server.route('/api/login',methods=['get','post']) # 接口访问既可以用get方法也可以用post方法 def login(): """ 登录接口,返回session_id 日志打印 :return: """ uname = flask.request.values.get('username') pd = flask.request.values.get('passwd') sql = 'select * from app_myuser where username="%s"'%uname log.debug('登录执行的sql是:%s'%sql) res = tools.my_db(sql) # 调用tools下的my_db函数,返回符合查询条件的一条结果 if res: # 查询结果存在 if tools.my_md5(pd) == res.get('passwd'): # 判断密码是否正确 # 调用tools下的my_md5函数对用户名进行加密 # 因为使用用户名MD5加密后,每一次失效后加密的结果还是一样的, # 所以在用户名后面 拼了一个当前时间戳str(time.time() uname_md5 = tools.my_md5(uname+str(time.time())) # uname_md5 = tools.my_md5(uname) key='session:%s'%(uname_md5) # redis中的key值就是加密后的用户名 # redis中的value值 字典格式 user_info = {'user_id':res.get('id'),'user_name':uname} r = tools.get_redis() # 调用tools下的连接redis函数 连接redis log.debug('连接redis成功') # 将 key值 value值,过期时间写入redis # 因为user_info是字典格式,需要转换成json串格式才能存入redis r.set(key,json.dumps(user_info),SESSION_EXPIRE = 60*60*1) #SESSION_EXPIRE 设置过期时间 # 接口返回的结果都是json的格式 # 在结果中返回相应的数据,返回 # 'login_time':time.strftime('%Y-%m-%d %H:%M:%S') 以格式化好的时间打印当前时间 res = {"code":0,"msg":"登录成功!",'session_id':uname_md5, 'login_time':time.strftime('%Y-%m-%d %H:%M:%S')} log.warning('%s 用户登陆成功'%uname) else: # 密码不正确时返回的结果 res = {"code":1,"msg":"密码错误!"} else: # 查询结果不存在 log.warning('%s用户不存在'%uname) res = {'code':2,"msg":"用户不存在"} # 返回的结果res是字典格式,需要转化成json格式 return json.dumps(res,ensure_ascii=False)
3、写一个校验session_id的函数,供后面的每个接口校验session_id使用
from . import tools import json def check_session(session_id): """ 校验session是否过期 :param session_id: 传入的session :return: session是否过期,返回session_id """ session_tag = False # SESSION是否失效的标识 r = tools.get_redis() # 连接redis # 从redis中获取session_id,因为存的时候前面加了 session: ,所以获取的时候也得在前面加上 res = r.get('session:'+session_id) if res: # 判断是否存在session_id session_tag = True # 将session_tag 置为True,表示session还没有失效 data = json.loads(res) # 把json转成字典 else: # 不存在session_id 让用户重新登录 data = {'code':4,'msg':'请登录!'} return session_tag,data # 返回两个参数,一个session_id是否过期,一个返回