zoukankan      html  css  js  c++  java
  • day8_接口开发_login

    @server.route('/login',methods = ['get','post'])
    def login():
    username = request.values.get('username','') # 获取参数用户名,如果没有获取到,默认是空字符串
    password = request.values.get('password','') # 获取参数密码,如果没有获取到,默认是空字符串
    if username.strip() and password.strip():
    password = md5_passwd(password) # 加密后的密码
    sql = 'select id,username from user where username="%s" and password="%s";' % (username,password)
    sql_res = conn_mysql(sql) # 获取数据库结果
    print('sql_res...',sql_res) # 这行有没有无所谓
    if sql_res: # 如果获取到,证明数据库里有该用户
    sign_str = username + str(int(time.time())) # 拼接签名,time.time()返回的是浮点型数据
    sign = md5_passwd(sign_str) # 加密后的签名
    op_redis(username, sign) # 把用户名和签名写到redis里
    return '{"msg":"登录成功","sign":"%s","userName":"%s"}' % (sign, username)
    # user_id = sql_res['id'] # 获取用user表里的的id,即第一个字段,一共四个字段
    # return '{"msg":"登录成功","sign":"%s","userId":"%s"}' % (sign,user_id)

    # 如果返回userId,还得通过userId去mysql数据库里取username,然后通过username去redis数据库里取签名,影响性能
    # 所以上面直接返回username,然后去redis数据库里拿到签名这样省了一步
    # response = make_response('{"msg":"登录成功","sign":"%s","userName":"%s"}' % (sign, username))
    # response.set_cookie(username,sign) # 设置cookies
    # return response
            else:
    return my_json(LOGIN_FAIL)
    else:
    return my_json(NOT_NULL)

    在登录接口里导入make_response就可以往浏览器里set cookies,这种方式不安全,会导致cookie盗用,如下图可以在浏览器里看到set到浏览器里的用户名和sign

    client发起请求,把username和password传到服务端,服务端进行校验,验证通过后,服务端返回请求,并把cookie set到客户端,下次客户端进行添加用户信息时把信息传到服务端,同时浏览器把cookie也发到服务端,服务端进行校验,通过request.values.get方法把客户端发过来的cookie get到,然后去和redis里面的进行对比,对比通过就可以进行后续的操作

     

    就是在day8_api->api->api.py的add_stu2接口里,脚本改成这样

     

     

    就实现了把sign写到cookies里,如下面三个图的设置以及打印出cookies里的sign

     

     

    登录接口开发完成后,会在redis数据库里生成登录的用户名和签名,如下图:

    同时也可以在mysql数据库里看到登录成功的用户名、密码和userId,如下图:

  • 相关阅读:
    Django连接MySQL(二)
    Django框架,python2和python3共存的情况下,创建Django项目
    pycharm破解
    dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)
    Spring中的事物管理,基于spring的bean的配置
    Spring中的事物管理,用 @Transactional 注解声明式地管理事务
    Ajax中GET和POST的区别
    Spring对 JDBC 的支持,JdbcTemplate类的使用
    Spring AOP:面向切面编程,AspectJ,是基于spring 的xml文件的方法
    Spring AOP:面向切面编程,AspectJ,是基于注解的方法
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8557780.html
Copyright © 2011-2022 走看看