flask之session

  1 '''
  2 session使用:
  3     session创建:
  4         (1)导入session            from flask import session
  5         (2)设置secret_key密钥      app.secret_key='sggdkhfjh3jgj4g4'
  6         (3)使用session:           session[key]=value
  7                 ①创建session字典;
  8                 ②通过secret_key + 时间戳 + 签名进行加密生成随机字符串;
  9                 ③将随机字符串写入到cookie中并返回给浏览器
 10 
 11     session登录验证:
 12         (1)客户端请求携带cookie中的存储的seesiond的加密字符串;
 13         (2)flask服务端收到session随机字符串通过secret_key进行解密得到session字典 
 14 
 15 
 16     session验证方式:
 17         (1)直接在每个view_func函数进行判断session字典的值
 18         (2)使用装饰器对vuew_func视图函数进行装饰,解决报错方式如下(二选一即可):
 19                 ①注意在路由中加上参数endpoint='唯一字符串'(指定在view_funcs视图函数字典中的key),否则报错inner已经存在
 20                 ②在装饰器函数的inner函数上加上装饰器@funuctools.wraps(impoert functools)
 21         (3)还可以通过在@app.before_request装饰的函数中进行校验(类似于django中间件功能,后续讲解)
 22 
 23 
 24 
 25 '''
 26 from flask import Flask, render_template, request, session, redirect
 27 
 28 app=Flask(__name__)
 29 app.secret_key='sdertyuhgfd23456q'   #seesion秘钥自定义
 30 
 31 #自定义设置cookie中存储的键
 32 # app.config['SESSION_COOKIE_NAME']='NOT session'
 33 #自定义设置cookie有效期,本设置单位是秒
 34 # app.config['PERMANENT_SESSION_LIFETIME']=1000
 35 
 36 
 37 
 38 @app.route('/login',methods=['GET','post'])#请求方式配置大小写均可
 39 def login():
 40     print(request.method)
 41     if request.method=='GET':
 42         return render_template('login.html')
 43     elif request.method=='POST':
 44         username=request.form.get('username')
 45         pwd=request.form.get('pwd')
 46         if username=='yang' and pwd=='123':
 47             session['username']=username
 48             return redirect('/')
 49 
 50         else:
 51             return 'login failed!'
 52 
 53 
 54 
 55 
 56 #(1)进入视图函数中进行session验证 
 57 @app.route('/')
 58 def index():
 59     if session.get('username'):
 60         return render_template('index.html')
 61     else:
 62         return redirect('/login')
 63 
 64 
 65 #(2)装饰器进行session判断之functools.wraps装饰器
 66 def auth(func):
 67     @functools.wraps(func)
 68     def inner(*args, **kwargs):
 69         if session.get('username'):
 70             return func()
 71         else:
 72             return redirect('/login')
 73     return inner
 74 
 75 
 76 @app.route('/index1')
 77 @auth
 78 def index1():
 79     return render_template('index.html')
 80 
 81 
 82 @app.route('/index2')
 83 @auth
 84 def index2():
 85     return render_template('index.html')
 86 
 87 
 88 
 89 #(3)装饰器进行session判断之endpoint参数设置
 90 def auth2(func):
 91     def inner(*args, **kwargs):
 92         if session.get('username'):
 93             return func()
 94         else:
 95             return redirect('/login')
 96     return inner
 97 
 98 @app.route('/index3',endpoint='index3')
 99 @auth2
100 def index3():
101     return render_template('index.html')
102 
103 
104 @app.route('/index4',endpoint='index4')
105 @auth2
106 def index4():
107     return render_template('index.html')
108 
109 
110 
111 if __name__ == '__main__':
112     app.run(host='0.0.0.0',port=9000,debug=True
113   

 

posted @ 2019-07-11 15:12  笑得好美  阅读(1337)  评论(1编辑  收藏  举报