1.在视图中添加判断

"""
在路由中添加身份验证
"""from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.debug = True@app.route('/login',methods=['GET','POST'],endpoint='l1') # endpoint用于url_for
def login():if request.method == "GET": # 当get方法访问登录页面,返回登录页面return render_template('login.html')else: # 当post方法访问时,则进行判断登录验证user = request.form.get('user')  # 获得form中name="user"对应的值pwd = request.form.get('pwd')  # 获得form中name="pwd"对应的值if user == 'wang' and pwd == '123':  # 判断用户,用户信息可以放在数据库内session['user_info'] = user  # 在session中添加登录的用户,在访问其他页面时可以使用return redirect('./index')return render_template('login.html',error='用户名或密码错误')  # 如果登录验证错误,则跳回本页面,并提示@app.route('/index',methods=['GET'])
def index():user = session.get('user_info')if not user:return redirect('/login')# return redirect('/login')return render_template('index.html')if __name__ == '__main__':app.run()

也可以使用装饰符


"""
通过装饰符做身份验证
"""import functools
from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.debug = True
app.secret_key = "123"@app.route('/login',methods=['GET','POST'],endpoint='l1') # endpoint用于url_for
def login():if request.method == "GET": # 当get方法访问登录页面,返回登录页面return render_template('login.html')else: # 当post方法访问时,则进行判断登录验证user = request.form.get('user')  # 获得form中name="user"对应的值pwd = request.form.get('pwd')  # 获得form中name="pwd"对应的值if user == 'wang' and pwd == '123':  # 判断用户,用户信息可以放在数据库内session['user_info'] = user  # 在session中添加登录的用户,在访问其他页面时可以使用return redirect('./index')return render_template('login.html',error='用户名或密码错误')  # 如果登录验证错误,则跳回本页面,并提示def login(func): # 验证用户身份的装饰器@functools.wraps(func) # 作用是保持被装饰函数的函数名,因为url_for是根据函数名来的,如果不保持会报错,或者使用endpoint取别名def inner(*args,**kwargs):user = session.get('user_info')if not user:return redirect("/login")return func(*args,**kwargs)return inner@app.route('/index',methods=['GET'])
@login
def index():return 'index'if __name__ == '__main__':app.run()

2.使用before_request

可以设置白名单黑名单,类似于添加配置文件

"""
通过before_request来做身份验证"""from flask import Flask,render_template,request,redirect,sessionapp = Flask(__name__)
app.debug = True
app.secret_key = 'adsfasdf'@app.before_request
def process_request(*args,**kwargs):if request.path == '/login':  # 如果是请求登录页面,则放行,否则会死循环,在这里可以配置白名单return Noneuser = session.get('user_info')if user:  # 如果user存在则放行,否则重定向到登录页面return Nonereturn redirect('/login')@app.route('/login',methods=['GET','POST'],endpoint='l1') # endpoint用于url_for
def login():if request.method == "GET": # 当get方法访问登录页面,返回登录页面return render_template('login.html')else: # 当post方法访问时,则进行判断登录验证user = request.form.get('user')  # 获得form中name="user"对应的值pwd = request.form.get('pwd')  # 获得form中name="pwd"对应的值if user == 'wang' and pwd == '123':  # 判断用户,用户信息可以放在数据库内session['user_info'] = user  # 在session中添加登录的用户,在访问其他页面时可以使用return redirect('/index')return render_template('login.html',error='用户名或密码错误')  # 如果登录验证错误,则跳回本页面,并提示@app.route('/index',methods=['GET'])
def index():return 'index'if __name__ == '__main__':app.run()

Flask 验证模式相关推荐

  1. WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式---- PeerTrust验证模式...

    WCF NetTcpBinding Transport安全模式(6)   ClientCredentialType证书验证模式---- PeerTrust验证模式 当证书验证模式设置为"Pe ...

  2. 思科ssh验证方式_SSH的应用:一个实例两种验证模式的实现

    一:说明 以下讨论的是密钥的两种认证模式,至于口令的认证不在本文档的考虑范围,相关的口令认证的文档请阅读本博的其他文章. 另外,有关SSH的基础方面的知识也不在本文档的讲解范畴,也请查阅本博的另外的相 ...

  3. 如何改变SQL SERVER的身份验证模式

    2007年07月09日 星期一 上午 10:10 1.点击"开始"-"运行",输入regedit,回车进入注册表编辑器       2.依次展开注册表项,浏览到 ...

  4. SharePoint 2010 中的BCS身份验证模式

    BCS(Business Connectivity Services)是SharePoint 2010中用于替换原先Microsoft Office SharePoint Server 2007企业版 ...

  5. Oracle Database Administrator验证模式

    下图清楚地描述了Oracle Database Administrator的身份验证模式. Oracle的验证模式有2种: (1).Os Authentication:通过登陆操作系统的账号验证身份. ...

  6. 如何修改SQL Server 2000身份验证模式和系统管理员

    大家安装SQL Server 2000时,很多人都习惯性的一路下一步,最后就会以windows身份验证作为登录数据库服务器的方式,假如有一天你后悔了,想以sql server的验证方式登陆,那怎么办呢 ...

  7. 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题

    1 问题描述 在验证模式下运行代码的时候,出现这样的错误: Process finished with exit code 137 (interrupted by signal 9: SIGKILL) ...

  8. flask debug模式logging模块报错os.rename(self.baseFilename, dfn) WindowsError: [Error 32]

    2019独角兽企业重金招聘Python工程师标准>>> flask debug模式logging模块报错 Traceback (most recent call last):   F ...

  9. Spring源码学习1.4 获取XML的验证模式

    Spring5源码分析(008)--IoC篇之加载BeanDefinition:获取XML的验证模式 -- 转载 注:<Spring5源码分析>汇总可参考:Spring5源码分析(002) ...

最新文章

  1. 访问的属性未定义_V8中的快属性
  2. 杭电1018 Big Number
  3. java简单的死锁检测(转载线下代码)
  4. [Web开发] MySpace 发布开发接口
  5. 如果在我爸的朋友圈当杠精,会挨揍吗?
  6. leetcode力扣647. 回文子串
  7. 凸优化第二章凸集 2.5 分离与支撑超平面
  8. 数据包接收系列 — IP协议处理流程(二)
  9. J2EE开发系列视频教程
  10. HTMLTestRunnerNew 测试报告详解
  11. WeNet语音识别实战
  12. DHCP/Netbios
  13. (转载)洪磊并不是反叛英雄
  14. matlab 光斑质心算法,高精度光斑中心定位算法
  15. 7月书讯(下)| 宝藏新书助你“乘风破浪”
  16. 乌班图linux怎么连手机热点,ubuntu 16.04 设置位wifi热点 方法(手机可链接)亲测可用...
  17. 让人心动的jQuery插件和HTML5动画
  18. 综合练习Java算法
  19. ubuntu 16.04 chrome flash player 插件更新(adobe flash player 不是最新版本)
  20. 八人抢答器讲解_8人抢答器的制作原理和过程说明是怎样的?

热门文章

  1. Java继承知识之基本控制语句(if、switch与穿透现象)
  2. C++动态空间申请、动态对象(new与delete运算)
  3. (篇四)C语言静态变量法,求各阶乘,的和
  4. Python+django建站入门篇(2):素数判断
  5. 关于流(文件)的输入,输出与调用(fprintf,fscanf)
  6. Linux关闭java命令,Linux系统关闭或重新启动主机的命令详解
  7. idea mybaits逆向工程_IDEA 中集成 MyBatis Generator 组件逆向生成工程
  8. python 惰性序列_菜鸟学飞自学Python(五)高阶函数
  9. C++之指针探究(六):二级指针和指针数组
  10. android p preview_细数 Android P 开发者预览版中最不能错过的新特性