• 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是否过期,一个返回
  • 相关阅读:
    ASP.NET MVC中防止跨站请求攻击(CSRF)
    C#操作JSON学习
    C# 产生随机密码
    博客园上好的技术系列收藏
    OWIN学习
    bzoj1068: [SCOI2007]压缩
    bzoj1012: [JSOI2008]最大数maxnumber
    bzoj1055: [HAOI2008]玩具取名
    bzoj1011: [HNOI2008]遥远的行星
    bzoj1008: [HNOI2008]越狱
  • 原文地址:https://www.cnblogs.com/hushaoyan/p/10193136.html
Copyright © 2020-2023  润新知