Flask教程之重定向与错误处理实例分析


Posted in Python onAugust 01, 2019

本文实例讲述了Flask教程之重定向与错误处理。分享给大家供大家参考,具体如下:

Flask类有一个redirect()方法. 当我们调用它时, 它会返回一个响应对象并且按指定的状态码将用户重定向到另一个位置.

redirect()方法的原型如下:

Flask.redirect(location, statuscode, response)

在上面的函数中,

  • location 我们要重定向的URL位置
  • statuscode 状态码会在http头中发送给浏览器, 默认为302
  • response 用这个参数来初始化响应对象

下面是一些标准的状态码:

  • HTTP_300_MULTIPLE_CHOICES
  • HTTP_301_MOVED_PERMANENTLY
  • HTTP_302_FOUND
  • HTTP_303_SEE_OTHER
  • HTTP_304_NOT_MODIFIED
  • HTTP_305_USE_PROXY
  • HTTP_306_RESERVED
  • HTTP_307_TEMPORARY_REDIRECT

重定向的状态码默认是302, 也就是已找到(found).

在下面的例子中, redirect()方法用于当登录失败的时候再次展示登录页面.

from flask import Flask, redirect, url_for, render_template, request
# Initialize the Flask application
app = Flask(__name__)
@app.route('/')
def index():
  return render_template('log_in.html')
@app.route('/login',methods = ['POST', 'GET'])
def login():
  if request.method == 'POST' and
  request.form['username'] == 'admin' :
  return redirect(url_for('success'))
  return redirect(url_for('index'))
@app.route('/success')
def success():
  return 'logged in successfully'
if __name__ == '__main__':
  app.run(debug = True)

Flask类有个abort()方法, 参数包括一个错误状态码.

Flask.abort(code)
  • 400 错误请求
  • 401 未授权请求
  • 403 禁止
  • 404 找不到资源
  • 406 不可接受
  • 415 未知媒体类型
  • 429 太多请求

我们来对上面代码中的login()函数做一点修改. 如果我们在登录失败时不重新展示登录页, 而是展示"未授权"页面, 那么我们需要把重定向那行代码替换为abort(401).

from flask import Flask, redirect, url_for, render_template, request, abort
app = Flask(__name__)
@app.route('/')
def index():
  return render_template('log_in.html')
@app.route('/login',methods = ['POST', 'GET'])
def login():
  if request.method == 'POST':
   if request.form['username'] == 'admin' :
     return redirect(url_for('success'))
   else:
     abort(401)
  else:
   return redirect(url_for('index'))
@app.route('/success')
def success():
  return 'logged in successfully'
if __name__ == '__main__':
  app.run(debug = True)

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python numpy元素的区间查找方法
Nov 14 Python
python将list转为matrix的方法
Dec 12 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
Python实现照片卡通化
Dec 06 Python
深入理解pytorch库的dockerfile
Jun 10 Python
python gdal安装与简单使用
Aug 01 #Python
Django模型修改及数据迁移实现解析
Aug 01 #Python
Django 大文件下载实现过程解析
Aug 01 #Python
python爬虫刷访问量 2019 7月
Aug 01 #Python
用Cython加速Python到“起飞”(推荐)
Aug 01 #Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 #Python
flask框架jinja2模板与模板继承实例分析
Aug 01 #Python
You might like
PHP文本数据库的搜索方法
2006/10/09 PHP
在JavaScript中调用php程序
2009/03/09 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python文件的读写和异常代码示例
2017/10/31 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
小学生手册家长意见
2015/06/03 职场文书
寻找成龙观后感
2015/06/12 职场文书
敬老院活动感想
2015/08/07 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android