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是否过期,一个返回

 

posted @ 2018-12-29 14:18  yatou001  阅读(578)  评论(0编辑  收藏  举报