'''
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. Ubuntu 安装 Qt, 安装辅助软件

    sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt-get install gcc g++ sudo apt-get inst ...

  2. [Ubuntu ] Vim Error E492 - Not an editor command: PluginInstall

    git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/plugin/Vundle.vim https://stackoverflow.co ...

  3. vue2.x学习笔记(二十八)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12682573.html. 生产环境部署 以下大多数内容在你使用vue cli的时候都是默认开启的,仅跟你自定义的构 ...

  4. Mysql 开窗函数实战

    Mysql 开窗函数实战 Mysql 开窗函数在Mysql8.0+ 中可以得以使用,实在且好用. row number() over rank() over dense rank() ntile() ...

  5. 51 NOD 1049 最大子段和 动态规划 模板 板子 DP

    N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,- ...

  6. 设置 Linux 支持中文

    1.首先在 command 输入 locale,可以看到 Linux 下默认的系统语言的是英文 2.vim ~/.bashrc 打开这个文件,该文件夹相当于系统配置文件 3.打开后,将后三行命令输入到 ...

  7. LeetCode 56,区间合并问题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第33篇文章,我们一起来看LeetCode的第56题,它的难度是Medium. 题意 这道题的题意也很简单,只有 ...

  8. SpringBoot上传文件大小限制

    SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSize ...

  9. Java集合面试题汇总篇

    文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 作为一位小菜 "一面面试官",面试过程中,我肯定会问 Java 集合的内容,同时作为求职者,也肯定会 ...

  10. python学习之变量以及变量/标识符/关键字

    Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言,代码简洁,功能强大,是使程序员能够专注于解决问题而不是研究语言本身.接下来我们先从它的语法开始学起 1.首先要懂得python ...