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

2017-12-17  本文已影响0人  马梦里

session

服务器端生成session:

图片.png

flask浏览器生成session:

@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

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

上一篇 下一篇

猜你喜欢

热点阅读