'''
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的更多相关文章

  1. Flask的session——关于写扩展所学习到的

    这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...

  2. Flask的session使用

    由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...

  3. FLASK 的Session和MoudelForm插件

    falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...

  4. 第六篇 flask中session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...

  5. Flask里面session的基本操作

    #session是依赖于flask的session模块 #如果想使用session模块,在配置里必须定义sessionkey from flask import Flask,session #建立对象 ...

  6. flask 的session

    python的flask操作设置.获得与删除session 首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地 ...

  7. Flask之session相关

    Flask的session简介 除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使 ...

  8. flask自定义session

    根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...

  9. Flask 进阶session和上下文管理解析

    session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...

  10. Flask的session

    ### session:1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个 ...

随机推荐

  1. 2019-2020-1 20199310《Linux内核原理与分析》第七周作业

    1.问题描述 在前面的文章中,学习了系统调用system_call的处理过程,在MenuOS中运行getpid命令,通过gdb跟踪调用time函数的过程,并分析system_call代码对应的工作过程 ...

  2. Codeforces Round #632 (Div. 2) 题解

    空山新雨后,天气晚来秋. 明月松间照,清泉石上流. 竹喧归浣女,莲动下渔舟. 随意春芳歇,王孙自可留.--王维 A. Little Artem 网址:https://codeforces.com/co ...

  3. c语言-----劫持自己02

    在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战 1. 需要实现的功能 在c语言中 system("notepad") 可以打开一个记事本 syst ...

  4. 数据库SQL语言从入门到精通--Part 3--SQL语言基础知识

    数据库从入门到精通合集(超详细,学习数据库必看) 一.关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是 ...

  5. DP 60题 -2 HDU1025 Constructing Roads In JGShining's Kingdom

    Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which ...

  6. Spring Data Jpa 入门学习

    本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...

  7. 慎用ToLower和ToUpper,小心把你的系统给拖垮了

    不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一: ...

  8. 网络流 A - PIGS POJ - 1149 最大流

    A - PIGS POJ - 1149 这个题目我开始感觉很难,然后去看了一份题解,写的很好 https://wenku.baidu.com/view/0ad00abec77da26925c5b01c ...

  9. Spring Cloud Alibaba系列(二)nacos作为服务配置中心

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spring Cloud Alibaba Nacos Config,您可 ...

  10. EChart将timeline图标设置为加号

    一 要实现的效果 二 官方文档 看一下官方文档上,替换symbol的描述: timeline.symbol string [ default: 'emptyCircle' ] timeline标记的图 ...