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 相关文章推荐
python实现读取命令行参数的方法
May 22 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
python按照多个条件排序的方法
Feb 08 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
Python模块相关知识点小结
Mar 09 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Python爬虫之Selenium实现键盘事件
Dec 04 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP 输出缓存详解
2009/06/20 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php数组去除空值函数分享
2015/02/02 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
python实现端口转发器的方法
2015/03/13 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python并行分布式框架Celery详解
2018/10/15 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python 调用Google翻译接口的方法
2020/12/09 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
开会迟到检讨书
2014/01/08 职场文书
校园安全教育广播稿
2014/02/17 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
寒假生活随笔
2015/08/15 职场文书