Flask 实现登陆 + session

案例一:

# -*- coding: utf-8 -*-
# @Time : 2019/9/24 16:26
# @Author : AnWen
from flask import Flask, render_template, request, redirect, session app = Flask(__name__)
app.secret_key = '!@#$%^&*()11'
app.debug = True @app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
if request.method == 'POST':
if request.form.get('username') == 'anwen':
session['user'] = request.form.get('username')
return redirect('/')
# 交由客户端保管机制
# 开启session['ursernsm'] = request.form.get('username')
# {"username":anwen}
# 序列化字典 == 字符串
# 加密字符串 Secret key 密钥字符串
#
# 接受反序列化Session;从cookie中获取到一个session key的值
# 通过Secretkey 解密session
# 反序列化成字典 @app.route('/')
def index():
print(session.get('user'))
return render_template('index.html') if __name__ == '__main__':
app.run()

案例二:

# 1 、要求:
# 1.登录页面
# 2.学生概况页面 ID name 点击详情
# 3.学生详情页面 ID name age gender # 2.使用session验证登录状态
# 思考:如何记录登录次数 # 3.基于Session编写登录验证装饰器
# 思考:如何给两个以上的视图函数增加装饰器
from flask import Flask, request, redirect, render_template, session
from functools import wraps USER = {'username': 'anwen', 'password': "123"}
STUDENT_DICT = {
1: {'name': 'Old', 'age': 38, 'gender': '中'},
2: {'name': 'Boy', 'age': 73, 'gender': '男'},
3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}
app = Flask(__name__)
app.secret_key = "!@#$%^&*()"
app.debug = True # 装饰器装饰多个视图函数
def wrapper(func):
@wraps(func) # 保存原来函数的所有属性,包括文件名
def inner(*args, **kwargs):
# 校验session
if session.get("user"):
ret = func(*args, **kwargs) # func = home
return ret
else:
return redirect("/login")
return inner # 首页
@app.route('/')
@wrapper
def index():
# if session.get('user'):
return render_template('index.html')
# else:
# return redirect("/login") # 登录
@app.route('/login', methods=["GET", "POST"])
def login():
if request.method == 'GET':
return render_template('login.html')
if request.method == 'POST':
if request.form.get("username") == USER["username"] and request.form.get("password") == USER["password"]:
session["user"] = request.form.get("username")
return redirect("/")
else:
return redirect("/login") # 学生概况页面
@app.route('/desc')
@wrapper
def desc():
# if session.get("user"):
return render_template('desc.html', stu_dic=STUDENT_DICT)
# else:
# return redirect("/login") # 学生详情页面
@app.route('/info')
@wrapper
def info():
# if session.get("user"):
return render_template('info.html', stu_dic=STUDENT_DICT)
# else:
# return redirect("/login") if __name__ == '__main__':
app.run()

Flask 实现登陆 + session的更多相关文章

  1. flask 状态保持session和上下文session的区别

    问题场景: 在falsk项目中导入了两个session:    首先,配置文件config.py文件中 有个 flask_session扩展导入了Session  ( from flask_sessi ...

  2. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

  3. 【flask】登陆后返回之前重定向跳转的页面

    登陆后返回之前重定向跳转的页面 一.前言 实现强制跳转到登陆页面,登陆后返回之前的页面的功能.网上跳登陆页面的很多:返回之前页面功能没多少.这里我只是用了自己的方法,有缺点和其他方法也请指点!(´ε` ...

  4. Flask中的session机制

    cookie和sessioncookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是解决了改问题,第一次 ...

  5. Flask的插件session、SQLAlchemy、Script、Migrate

    一.flask-session 1.为什么要使用flask-session 因为flask默认的session是通过请求上下文放入到Local中的,是存在内存的,而使用flask-session可以更 ...

  6. flask基础之session原理详解(十)

    前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...

  7. flask中cookie,session的存储,调用,删除 方法(代码demo)

    # -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...

  8. flask总结之session,websocket,上下文管理

    1.关于session flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看 from flask import Fl ...

  9. Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用

    Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文 request session re ...

随机推荐

  1. CEF拦截js层alert弹窗 OnJSDialog 《转》

    一 引言 CEF3嵌入后,用JS 弹出Alert框,按钮错位,确定按钮勉强能看到.很难看.为了改善体验,决定重写提示框. 环境:VS2008  VC  MFC.   二 原理 参看类 CefJSDia ...

  2. unity2019新建LWRP项目出错:Failed to resolve project template

    原因不详,但是在C盘创建项目的确会出现这个问题,改到D盘或E盘就没这个问题了

  3. winrunner 测试工具

    WinRunner在项目中的作用     (winrunner测试设计:http://blog.chinaunix.net/uid/301743/year-2013-list-81.html?/178 ...

  4. '>/dev/null 2>&1' 是什么意思?

    '>' 用于重定向 '/dev/null' 是一个黑洞,任何发送的数据都将被丢弃 '2' 是标准错误的文件描述符 '>' 用于重定向 '&' 是文件描述符的符号(没有它,以下1将被 ...

  5. tomcat关闭异常导致的项目无法重启

    有时候 会莫名其妙的,项目启动时候 报tomcat启动异常.重启项目 甚至重启电脑 都没用. 这个时候 ,一般是代码有问题... 这次遇到的问题 就是 引用了外部的jar包,里面有一个自定义异常.但是 ...

  6. javascript中this、new、apply和call详解

    如果在javascript语言里没有通过new(包括对象字面量定义).call和apply改变函数的this指针,函数的this指针都是指向window的,重要的话要说三遍.... 讲解this指针的 ...

  7. [LeetCode] 388. Longest Absolute File Path 最长的绝对文件路径

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  8. 【VS开发】VS2015没修改源文件也导致重新编译的解决办法

    在使用VS2010编译C++程序的时候,每次修改工程中的某一个文件,点击"生成-仅用于项目-仅生成**"时,往往都是整个工程都需要重新编译一遍.由于这个工程代码量太大,每次编译完成 ...

  9. linux 保留yum安装后的rpm包

    在linux上,使用yum安装,默认安装完成之后会删除下载的rpm包:想要yum安装软件后,还保留安装包,那么需要修改/etc/yum.conf配置文件中的keepcache参数. [root@bog ...

  10. javadoc 抽出代码中的注释

    背景: 在已经有的项目里面利用javadoc来抽出代码中每个类,每个方法的注释部分,形成一个文档. 方法1 利用eslipse来实现 之后会在指定的目录下生成html文档 方法2 利用命令来执行 先把 ...