Flask--session的新应用--当全局变量来用
来源:互联网 发布:协方差矩阵退化 编辑:程序博客网 时间:2024/06/07 09:03
今天尝试了一个在flask中的session的新用法,我还没有在其他地方看到这种用法;所以记录一下。
心得:
session就像一个map数据类型对象,有键值对的概念。比如:session[‘data’] = ‘you need it’ 然后在其他的地方就可以直接取出或者直接判断比如:if seesion[‘data’] == ‘you need it’ 用起来很简单。
一、session的通常用法
session在Flask中通常用做设置某些页面的权限,比如某些页面必须要登录才可以看到,登录的信息或标志就放到session中。它的使用过程如下:
- (1)在整个flask工程的启动文件中添加
app.config['SECRET_KEY'] = 'you never guess'
- (2)再在使用的py文件中添加
from functools import wraps
- (3)在使用的py文件中添加
from flask import session
- (4)然后写处理函数
- (5)再在逻辑代码中写已经登录的标志
(6)最后在设置限制的视图函数前添加限制函数的修饰器
主要代码
启动模块
main.py
#encoding: utf-8from flask import Flaskfrom main import mainapp = Flask(__name__, template_folder='templates', # 指定模板路径,可以是相对路径,也可以是绝对路径。 static_folder='static', # 指定静态文件前缀,默认静态文件路径同前缀 # static_url_path='/opt/auras/static', #指定静态文件存放路径。 )app.register_blueprint(main) # 注册main蓝图,没有指定前缀。app.config['SECRET_KEY'] = 'you never guess' # 使用 session 必须要配置这个,不然会报500错误的!if __name__ == '__main__': app.run()
在视图模块中
views.py
#encoding: utf-8from flask import render_template,request,session, redirectfrom main import mainfrom functools import wraps#登录、注册认证函数def authorize(fn): @wraps(fn) def wrapper(*args, **kwargs): # 这里就像过滤器,有了那个修饰器标志的视图函数都必须经过这个函数才可以返回请求 user = session.get('logged_in',None)#取得登录标志 if user: return fn(*args, **kwargs)#登录了就返回请求 else: return '访问该网页需要登录!'#否则就转到注册的页面 return wrapper@main.route('/')@main.route('/home')def index(): print'__name__', __name__ return render_template('main/home.html')#登录用户@main.route('/signin', methods=['GET', 'POST'])def signin(): if request.method == 'GET': return render_template("user/login.html") if request.method == 'POST': u = request.form['username'] p = request.form['password'] if isNameExisted(u): t = checkPassword(u);#获得数据库存储的hash值 if check_password_hash(t,p):#查询有没有这个用户 session['logged_in'] = True # 登录成功 return redirect('/user/blog') else:#没有用户就是新用户那么就转入注册页面 return redirect('/register')@main.route('/doc')@authorize #这个修饰器表示,这个视图页面必须登录才可以访问def blog(): return render_template('user/blog.html')#注销用户@main.route('/signout', methods=['GET', 'POST'])@authorizedef signout(): session['logged_in'] = False # 变成false 就意味着需要重新登录了 return redirect('/home')
二、全局变量的用法
这也很简单,直接这某个视图函数定义一下,然后就可以在其他的视图函数里面进行使用了。
@main.route('/smartschoolbus/repwd_first', methods=['GET','POST'])def ssb_repwd_first(): if request.method == 'GET': return render_template('main/ssb_repwd.html') if request.method == 'POST': username = request.form['username'] checkcode = request.form['checkcode'] if not isNameExist(username): return 'nameerror' elif not isCheckCode(checkcode): return 'checkcodeerror' else: session['repwd_name'] = username # 定义一个session"键"为repwd_name"值"为username里面的值 session['auth_ssb'] = True return 'success'@main.route('/smartschoolbus/repwd_second', methods=['GET','POST'])@authorizedef ssb_repwd_second(): if request.method == 'GET': return render_template('main/ssb_repwd_second.html') if request.method == 'POST': username = request.form['username'] pwd_temp = hashlib.sha1(request.form['password'])# 哈希加密 password = pwd_temp.hexdigest()# 哈希加密 if not session['repwd_name'] == username: #另一个视图函数里面就可以直接使用了,就如同一个全局函数,很简单 return 'nameerror' else: setPassWord(username,password) session['auth_ssb'] = False return 'success'
阅读全文
0 0
- Flask--session的新应用--当全局变量来用
- flask 的 g, session
- 用 Flask 来写个轻博客 (24) — 使用 Flask-Login 来保护应用安全
- web应用不断创建新的session
- Flask中session的用法
- 关于Flask的默认session
- Flask 用Blueprint实现模块化的应用
- ViewPager的一个应用,用fragment来当页面,可以左右滑动,上面有一条线,来分隔
- Flask-session
- python的全局变量应用
- flask 上下文全局变量
- 全局变量显示网站的总访问人数以及当前访问人数(Application 和Session的应用)
- Flask request,g,session的实现原理
- 基于Flask session机制的单点登录
- Flask secret_key的设置对session有影响
- 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
- 用 Flask 来写个轻博客 (20) — 实现注册表单与应用 reCAPTCHA 来实现验证码
- 用 Flask 来写个轻博客 (23) — 应用 OAuth 来实现 Facebook 第三方登录
- Elasticsearch Java API简介
- SOE 部署错误 ClassFactory cannot supply requested class
- Lua笔记【2】
- ARM中int、long类型位数
- 对比两个函数tf.nn.softmax_cross_entropy_with_logits和tf.nn.sparse_softmax_cross_entropy_with_logits
- Flask--session的新应用--当全局变量来用
- Flask学习笔记--8
- vb.net 教程 12-2 HtmlDocument类 2
- Android Fk-PKMS(2) PackageManagerService之应用的安装与卸载
- 夜长,梦短
- pat-a1018. Public Bike Management (30)
- 初见Lambda表达式
- Python小问题总结
- stack