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是一个思路.一个 ...
随机推荐
- php下载各种编辑器输出的内容到word中展示
<?php/** * Created by PhpStorm. * User: 工作 * Date: 2018/1/11 * Time: 12:02 */ //连接数据库$dsn = " ...
- Ansible Jinja2 模板使用
Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- [Windows] 如何通过 mount point 找到对应的 VHD 文件
假设有一个 Virtual Disk(VHD) 文件.已经 online --> attach --> mount. 知道 mount 的文件夹,要找到 .vhd 文件.可以用如下方法: ...
- MySQL系列(一)
一.简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发.发布并支持的.有以下特点: MySQL是一种数据库管理系统. MySQL是一种关联数据库管理系统. MySQ ...
- .Net平台GC VS JVM垃圾回收
前言 不知道你平时是否关注程序内存使用情况,我是关注的比较少,正好借着优化本地一个程序的空对比了一下.Net平台垃圾回收和jvm垃圾回收,顺便用dotMemory看了程序运行后的内存快照,生成内存快照 ...
- 浅析Java三大特性封装、继承、多态,及作业分析
前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 ...
- 通过config文件配置动态导入模块
需求: 固定的服务中要调用不同的算法,当前服务中实现的动态导入是通过在config配置中加上参数:proto="AiProto(1,4)",在服务中from pathname im ...
- 多方法解决设置width:100%再设置margin或padding溢出的问题
2019独角兽企业重金招聘Python工程师标准>>> 当设置了父元素的宽度,子元素设置宽度为100%后再在加上子元素上添加padding或margin值就会溢出.举个例子: < ...
- GPTL—练习集—006树的遍历
#include<bits/stdc++.h> using namespace std; typedef int daTp;//datatype typedef struct BTNode ...
- ASP.NET Core WebApi(01)项目建立
前言:前一段时间学习了ASP.NET Core,决定写个简单的项目,旨在消化所学内容,并记录过程中遇到的问题.本章是第一篇,内容为项目的建立 一.准备工作 安装Visual Studio时,默认会安装 ...