flask之session
'''
session使用:
session创建:
(1)导入session from flask import session
(2)设置secret_key密钥 app.secret_key='sggdkhfjh3jgj4g4'
(3)使用session: session[key]=value
①创建session字典;
②通过secret_key + 时间戳 + 签名进行加密生成随机字符串;
③将随机字符串写入到cookie中并返回给浏览器 session登录验证:
(1)客户端请求携带cookie中的存储的seesiond的加密字符串;
(2)flask服务端收到session随机字符串通过secret_key进行解密得到session字典 session验证方式:
(1)直接在每个view_func函数进行判断session字典的值
(2)使用装饰器对vuew_func视图函数进行装饰,解决报错方式如下(二选一即可):
①注意在路由中加上参数endpoint='唯一字符串'(指定在view_funcs视图函数字典中的key),否则报错inner已经存在
②在装饰器函数的inner函数上加上装饰器@funuctools.wraps(impoert functools)
(3)还可以通过在@app.before_request装饰的函数中进行校验(类似于django中间件功能,后续讲解) '''
from flask import Flask, render_template, request, session, redirect app=Flask(__name__)
app.secret_key='sdertyuhgfd23456q' #seesion秘钥自定义 #自定义设置cookie中存储的键
# app.config['SESSION_COOKIE_NAME']='NOT session'
#自定义设置cookie有效期,本设置单位是秒
# app.config['PERMANENT_SESSION_LIFETIME']=1000 @app.route('/login',methods=['GET','post'])#请求方式配置大小写均可
def login():
print(request.method)
if request.method=='GET':
return render_template('login.html')
elif request.method=='POST':
username=request.form.get('username')
pwd=request.form.get('pwd')
if username=='yang' and pwd=='':
session['username']=username
return redirect('/') else:
return 'login failed!' #(1)进入视图函数中进行session验证
@app.route('/')
def index():
if session.get('username'):
return render_template('index.html')
else:
return redirect('/login') #(2)装饰器进行session判断之functools.wraps装饰器
def auth(func):
@functools.wraps(func)
def inner(*args, **kwargs):
if session.get('username'):
return func()
else:
return redirect('/login')
return inner @app.route('/index1')
@auth
def index1():
return render_template('index.html') @app.route('/index2')
@auth
def index2():
return render_template('index.html') #(3)装饰器进行session判断之endpoint参数设置
def auth2(func):
def inner(*args, **kwargs):
if session.get('username'):
return func()
else:
return redirect('/login')
return inner @app.route('/index3',endpoint='index3')
@auth2
def index3():
return render_template('index.html') @app.route('/index4',endpoint='index4')
@auth2
def index4():
return render_template('index.html') if __name__ == '__main__':
app.run(host='0.0.0.0',port=9000,debug=True
flask之session的更多相关文章
- Flask的session——关于写扩展所学习到的
这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...
- Flask的session使用
由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...
- FLASK 的Session和MoudelForm插件
falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...
- 第六篇 flask中session
Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...
- Flask里面session的基本操作
#session是依赖于flask的session模块 #如果想使用session模块,在配置里必须定义sessionkey from flask import Flask,session #建立对象 ...
- flask 的session
python的flask操作设置.获得与删除session 首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地 ...
- Flask之session相关
Flask的session简介 除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使 ...
- flask自定义session
根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...
- Flask 进阶session和上下文管理解析
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...
- Flask的session
### session:1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个 ...
随机推荐
- 2019-2020-1 20199326《Linux内核原理与分析》第八周作业
可执行程序工作原理## 编译链接的过程### 示例程序hello.c #include<stdio.h> void main() { printf("Hello world\n& ...
- 第三方库PyYAML
建议参考PyYAML Documentation来源:http://pyyaml.org/wiki/PyYAMLDocumentation:http://blog.csdn.net/conquer07 ...
- Linux利用sed批量修改文件名
初始文件名 # ls -lh total 5.5G -rw-r--r-- 1 root root 193K Sep 28 09:38 20180908.txt drwxr-xr-x 2 root ro ...
- Vue tools开发工具报错Cannot read property '__VUE_DEVTOOLS_UID__' of undefined
使用 vue tools 开发工具,不显示调试面板中的组件,点击控制台报错: Cannot read property 'VUE_DEVTOOLS_UID' of undefined 在 main.j ...
- Retrofit的文件上传和进度提示
2019独角兽企业重金招聘Python工程师标准>>> 1.写一个上传监听的接口: /** * Created by Zzm丶Fiona on 2017/7/31. */ publi ...
- 替换input单选框的样式
实现效果:. css的input单选框的样式很丑,有时候不想使用原生的样式,如上照片,可以使用下面的方法. 思路是,给inpu加visibility:hidden隐藏,然后使用不同的图片绝对定位覆盖在 ...
- iOS开发之结合asp.net webservice实现文件上传下载
iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...
- HTML--HTML入门篇(我想10分钟入门HTML,可以,交给我吧)
我要正经的讲一节课,咳咳! HTML简介(废话) HTML称为超文本标记语言,是一种标识性的语言.它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整 ...
- KNN (K近邻算法) - 识别手写数字
KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个 ...
- 手写实现java栈结构,并实现简易的计算器(基于后缀算法)
一.定义 栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底.对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈).入 ...