11content_processor

1,content_processor

  • 上下文处理器应该返回一个字典,字典中的key会被模板中当成变量来渲染
  • 上下文处理器返回的字典,在所有页面中都是可以使用的
  • 被这个装饰器修饰的钩子函数,必须要返回一个字典,即使为空也要返回

登陆的时候才会显示用户名。

from flask import Flask,render_template,g,url_for,request,redirect,session
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)

@app.route('/')
def hello_world():
    # print("index")
    return 'index!'

@app.route('/login/' ,methods=['GET','POST'])
def login():
    # print("login")
    if request.method == "GET":
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        if username == "1" and password == "1":
            session['username'] = "1"
            return 'Success to login in!'
        else:
            return redirect(url_for('login'))

@app.route('/edit/')
def edit():
    ##1和 #2都是一样的意思,但是1更方便,hasattr() 函数用于判断对象是否包含对应的属性。
    if hasattr(g,'username'):  #1
    # if session.get('username') == "1":  #2
        return render_template('edit.html')
    else:
        return redirect(url_for('login'))

# before_request:在请求之前执行的,在视图函数执行之前执行的。
# before_request只是一个装饰器,他可把要设置为钩子函数的代码放到视图函数执行之前来执行。
@app.before_request
def my_before_request():
    print('hw')
    # 有username证明用户是登陆状态
    if session.get('username'):
        g.username = session.get('username')  #g?
# 相当于在每一个视图函数(如‘/’,/login/执行前都会执行这个函数。)

@app.context_processor
def mycp():
    return {"username":"1"}
if __name__ == '__main__':
    app.run()

 

posted @ 2019-05-30 11:29  puppet洛洛  阅读(223)  评论(0编辑  收藏  举报