【flask web】补充内容,session、全局对象g、装饰器、钩子函数。

一、服务器中的session以及浏览器中的cookie

1、flask中要使用session的话需要在配置文件中的SECRET_KEY,这个secret_key是用来加密字符串的。
服务器中的session就是浏览器中的cookie

app.secret_key = “加密字符串"

2、session在flask中的使用

#设置session
session[“username”] = “”
#读取session
result = session[“res”]
Session.get(‘res')
#删除session
session.pop(‘username’)
#清除session中的所有内容
session.clear()

2、session还可以设置session过期时间,一般不设置的话就是浏览器关闭就是结束了。

#设置session.permanent的属性为True,就可以设置过期时间为31天(默认)
session.permanent = True


#也可以手动调
#导入包
from datetime import timedelta
#配置有效时间
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
#设置过期时间
session.permanent = True

二、钩子函数

钩子函数函数的作用:在正常执行的代码中,插入一段自己想要执行的代码。
例如:

#在处理项目的第一个请求前执行,项目启动后会执行
@app.before_first_request

#before_request 在每次请求前会执行
@app.before_request

#在每次请求完成后执行
@app.after_request

#不管是否有异常,注册的函数都会在每次请求之后执行
@app.teardown_request

#不管是否有异常,注册的函数都会在每次请求之后执行
@app.teardown_appcontent

#自定义过滤器
@app.template_filter

#上下文处理器,如果一些在很多模版中都要用到的变量,那么就可以用这个钩子函数来返回
@app.context_processor
def my_context_process(): 
    return {'user':g.user}

三、装饰器

作用:定义一个函数,用来为其他函数添加额外的功能

#导入包
from functors import wraps

#定义,func是在被注释的函数,这个装饰器是判断是否已经登陆,如果没有则跳转到登录页面
def before_open_verify(func):
    #保留func的信息
    @wraps(func)
    #这里的参数是 输入到func里面的参数
    def inner(*args,**kwargs):
        if g.user is None:
            return redirect(url_for("auth.login_page"))
        else:
            res = func(*args,**kwargs)
            return res
    return inner

#使用
@bp.route("/qa/detail/<qa_id>",methods=["GET","POST"])
@before_open_verify
def qa_detail(qa_id):
    if request.method == "GET":
        question = QuestionModel.query.get(qa_id)
        return render_template("detail.html",question = question)
    else:
        answer = AnswerModel(question_id = qa_id, author_id = g.get("user").id,
                             answer_content = request.form["content"],answer_time = datetime.now())
        db.session.add(answer);
        # 3. 将db.session中的改变同步到数据库中
        db.session.commit();
        return redirect(url_for("qa.qa_detail",qa_id=qa_id))

四、全局变量g

生命周期:单个request请求处理期间生效

#导入包
from flask import g
#设置全局变量
setattr(g, “user", user)
g.user = user
#判断是否有某个属性
hasattr(g,”user”)
If g.user == None
#获取某个属性
getattr(g,”user”)
g.user
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值