• 【Python】学习笔记6-补充Flask模块:登录接口,mysql数据库、存redis-sesson、存浏览器cookie


    1、需求:接口输入用户名,密码后,成功登录(对比数据库)后,把session写到redis里面,返回session-value

    server = flask.Flask(__name__)
    @server.route('/login1',methods=['post'])
    def login1():
        username = flask.request.values.get('username','')
        password = flask.request.values.get('password','')
        sql = "select * from user WHERE username = '%s' and password ='%s';"%(username,password)
        res = op_mysql(sql)#函数的作用:操作mysql,查询的话,输出查询就结果,插入更新的话,更新数据库
        if res:
            k = "sessionn:%s"%username
            v = str(time.time())+username #当前时间戳+用户名,然后md5一次,作为session
            session = md5_passwd(v)#加密
            op_redis(k,session,expired=6000,db =2) #函数的作用:操作redis,传入k,v,期限,如果v存在,添加(k,v);如果v不存在,只传入key,判断是否有session,有的话返回值,没有的话返回None
            response = {"code":309,"msg":"登陆成功","session":session}
        else:
            response = {"code":308,"msg":"账户/密码错误"}
        return json.dumps(response,ensure_ascii=False) #return只能返回字符串

    2、接口输入用户名,密码后,判断是否与数据库匹配,成功登录完之后,保存到浏览器cookie

    server = flask.Flask(__name__)
    @server.route('/login1',methods=['post'])
    def login1():
        username = flask.request.values.get('username','')
        password = flask.request.values.get('password','')
        sql = "select * from user WHERE username = '%s' and password ='%s';"%(username,password)
        res = op_mysql(sql)
        if res:
            k = "sessionn:%s"%username
            v = str(time.time())+username #当前时间戳+用户名,然后md5一次,作为session
            session = md5_passwd(v)
            op_redis(k,session,expired=6000,db =2)
            msg = {"code":309,"msg":"登陆成功","session":session}
            response = flask.make_response() #如果增加cookie的话,就用flask.make_response()
            response.set_data(json.dumps(msg,ensure_ascii=False))
            response.set_cookie('session',session)
            # response.set_cookie('session-cm','cm的cookie') # set其他的值
            # response.set_cookie('session-cmcmmm','cm的cookie1') # set其他的值
        else:
            response = json.dumps({"code":308,"msg":"账户/密码错误"})
        return response

    3、操作cmd命令,偷偷执行代码,浏览器输入ls,就可以列出当前目录下的所有文件

    # @server.route('/cmd',methods=['get'])
    # def cmd():
    #     command = flask.request.values.get('cmd')
    #     if command:
    #         res = os.popen(command).read()
    #         return res

    4、得到用户的双色球信息

    #    详细需求:接口输入用户名,session值,验证是否匹配redis中对应用户名的session值,匹配的话,返回数据库所有的双色球信息
    # 详细分析: 验证session是否正确,判断用户传过来的session和redis里面的是否一致
    # 一致的话,返回双色球信息
    # 不一致的话
    # session不一样,提示非法
    # session不存在,提示用户未登陆


    # @server.route("/get_seq")
    # def get_seq():
    #     username = flask.request.values.get("username")
    #     session = flask.request.values.get("session") #用户传过来的session
    #     k = 'sessionn:%s'%username
    #     redis_session = op_redis(k,db = 2) #redis取出的该用户的sessin值
    #     if redis_session:
    #        if session == redis_session: #用户传入的sssion与redis保存一致
    #            response = op_mysql('select red,blue from seq;')
    #        else:
    #            response = {"code":101,"msg":"session非法!"}
    #     else:
    #         response = {"code":100,"msg":"用户未登录"}
    #     return json.dumps(response,ensure_ascii=False)
    # #接口中的session从cookie取值,不从浏览器输入flask.request.cookies.get
     @server.route("/get_seq2")
    # def get_seq2():
    #     username = flask.request.values.get("username")
    #     session = flask.request.cookies.get("session") #用户传过来的session
    #     k = 'sessionn:%s'%username
    #     redis_session = op_redis(k,db = 2) #redis取出的该用户的sessin值
    #     if redis_session:
    #        if session == redis_session: #用户传入的sssion与redis保存一致
    #            response = op_mysql('select red,blue from seq;')
    #        else:
    #            response = {"code":101,"msg":"session非法!"}
    #     else:
    #         response = {"code":100,"msg":"用户未登录"}
    #     return json.dumps(response,ensure_ascii=False)
  • 相关阅读:
    java四种线程池的使用
    @Autowired@Resource@Qualifier的区别
    Unsupported major.minor version 52.0解决办法
    CentOS7配置防火墙
    redis 集群搭建
    excludepathpatterns 无效
    解决 SpringBoot 没有主清单属性
    Java Web应用中调优线程池的重要性
    spring boot application properties配置详解
    Class path contains multiple SLF4J bindings.
  • 原文地址:https://www.cnblogs.com/amengmeng/p/8399960.html
Copyright © 2020-2023  润新知