zoukankan      html  css  js  c++  java
  • 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是否过期,一个返回
  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/hushaoyan/p/10193136.html
Copyright © 2011-2022 走看看