美文网首页
flask之session/url_for/git隐私管理/错误

flask之session/url_for/git隐私管理/错误

作者: 马梦里 | 来源:发表于2017-12-17 15:42 被阅读0次

session

服务器端生成session:

  • 用户登录成功后,将user_idsession_id的对应关系存一份在服务器(也就是Session数据库):
    Session.new(dict(session_id = random_str(), user_id = u.id))
    然后在响应头设置cookie:
    headers = {'Set-Cookie': 'sid={}'.format(session_id)}
    之后用户访问的时候,请求头中也会包含cookie键值对,从cookie拿到sid的值也就是session_id,然后去服务器数据库查session_id,如果找到了就通过对应的user_id返回user;如果没有,就说明没登录;
图片.png

flask浏览器生成session:

  • 存一对信息在浏览器内,浏览器和我们共享一个secret_key,是一个对称密钥,用这个对称密钥去加密和解密。对称密钥需要自己制定。
@api_user.route('/login', methods = ['POST'])
def route_login():
    form = request.form
    u = User(form)
    if u.validate_login():
        u = User.find_by(username=u.username)
        # session_id = random_str()
        # s = Session.new(dict(
        #     session_id=session_id,
        #     user_id=u.id,
        # ))
        # log('session', s)
        #      1
        # headers = {
        #     'Set-Cookie': 'sid={}'.format(session_id)
        # }
        # # 登录后定向到 /
        # return redirect('/', headers)
        #      2
        # # 登录后定向到 /
        # redirect_to_index = redirect('/')
        # response = make_response(redirect_to_index)
        # response.set_cookie('sid', value=session_id)
        # return response
        #      3
        session['user_id'] = u.id
        return redirect('/')
    else:
        return redirect('/login')
from flask import session
def current_user():
    # session_id = request.cookies.get('sid', '')
    # sessions = Session.all()
    # for s in sessions:
    #     if s.session_id == session_id:
    #         u = User.find_by(id=s.user_id)
    #         return u
    user_id = session.get('user_id', None)
    if user_id is not None:
        user_id = int(user_id)
        u = User.find_by(id=user_id)
        return u
    else:
        return None
// 自己设定加密方式
app.secret_key = 'dvndifvbduvdjfn'

flask在浏览器生成的session,请求头/响应头直接存的是用户id的键值对,不过对这个键值对进行整体加密。服务器可以直接拿到这个id找到对应的用户。
难道每登录一次就会设置一个随机字符串吗?在session有效期间内都是一样的,失效了之后,再次登录,会重新生成一个随机字符串,session是有有效期的

url_for

url_for('Bluepoint.viewer')

git隐私管理

在代码中可能会有隐私或密码,不易公开上传,可以这样:

  1. server.py新建secret.py文件
  2. server.pyimport secret
- app.secret_key = 'dvndifvbduvdjfn'
+ app.secret_key = secret.flask_key
  1. 新建文件:gitignore,添加secret.py到里面即可;

如果不上传git,可以通过filezilla手动创建:

  1. 拉代码
  2. 拷贝敏感信息
  3. 启动服务(supervisor)

错误处理:

将知乎404代码抄过来,.html放在templates里面,其他文件放入static里面,注意将templates里面应用static文件的路径改掉。
在server.py定义函数:

@app.errorhandler(404)
def error_404(e):
    return render_template('zhihu404.html'), 404

装饰器可以截取404错误,然后根据自定义返回,return后面有两个参数,一个是返回内容,一个是染回的状态码(可以任意指定,比如200);

裸露代码处理

图片.png

这部分代码裸露在外的作用有两个:

  1. app.run()需要调用
  2. wsgi.py里面需要调用:application = server.app
    现在定义函数,将其包裹,并返回app:
图片.png

两个调用做如下改动即可:

图片.png 图片.png

那么处理错误的函数怎么处理呢:

图片.png

这样可以把视图函数上面的装饰器也去掉:

图片.png

讲一下装饰器:
装饰器就是一个函数,它下面的函数就是他的参数,@的作用就是不用写后面的参数;
注意
函数当做参数被传递的时候,不需要()和里面的参数;

相关文章

网友评论

      本文标题:flask之session/url_for/git隐私管理/错误

      本文链接:https://www.haomeiwen.com/subject/jynywxtx.html