索鸟网

  1. 首页
  2. [译]Flask教程--重定向与错误

[译]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

来源地址:https://segmentfault.com/a/1190000011441932 版权归作者所有!

相关教程

  • [译]Flask教程--Cookie

    cookie是保存在客户端电脑中一种文本形式的数据. 它的作用是记录并追踪客户端使用方面的数据, 用于统计数据和达到更好的用户体验. Flask的全局request对象包含了cookie属性, 它是个字典对象, 其键值对就是客户端收到的cookie的名称和值. 并且, cookie还记录了自己的过期时间, 路径, 以及网站域名. 在Flask中, 返回
  • [译]Flask教程-模版

    我们可以让绑定到某个URL的函数返回HTML. 比如下面的代码中, hello()函数会返回由<h1>包裹的Hello World字符串. from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "<html><
  • [译]Flask教程--静态文件

    一个web应用经常需要javascript或css之类的静态文件来帮助网页更好的展示内容. 通常, web服务器被用来提供这种静态文件服务, 但在Flask程序的开发阶段, 这些文件需要被放置在Flask应用根目录下的static文件夹中, 启动后使用时url前缀以/static开头. 在下面的例子中, hello.js文件中定义了一个javascrip
  • [译]Flask教程-HTTP方法

    HTTP协议是万维网数据通信的基础. 在这个协议上可以对同一URL使用不同的方法获取数据.下面展示了几种不同的HTTP方法. GET 将未经加密的信息发送的服务器. 是最通用的方法. HEAD 该方法除了服务端不返回响应内容只返回头信息之外, 同GET是一样的. POST 用于向服务器发送HTML表单数据. POST请求不会被缓存. PUT 将
  • [译]Flask教程--请求对象

    在Flask中,web页面发送过来的请求到了服务器这边,被转换成为一个全局请求对象。我们为了处理这个请求对象,需要从Flask包中引用它。这个请求对象重要的属性如下: form 这个字典对象的键值对分别代表请求中表单的参数和值。 args 请求URL ?号之后的查询字符串的键值对 cookies 包含有Cookie名称和值的字典对象 files
  • 输入重定向,正确输出重定向,错误输出重定向

    一、标准输入(STDIN)A.输入重定向(标准输入):<作用:将原先键盘输入的内容改由文件内容代替[root@wenwen ~]# cat > test.txtasdasasdasasdas按crtl + d 退出将network内容导入到test.txt中去[root@wenwen ~]# cat > test.txt < /etc/init.d/net
  • [译]Flask教程--将表单数据发送到模板

    之前我们已经看到在Flask中我们可以给URL规则指定http方法, 对应的函数可以按字典形式接收表单数据, 然后将这些数据输送到模板中并最终渲染为网页. 在下面的例子中, URL "/" 渲染一个含有表单的网页(student.html). 填入到表单的数据被post到URL "/result" 然后触发了result()函数. request()函数
  • 重定向与转发的区别

    转发在服务器端完成的;重定向是在客户端完成的 转发的速度快;重定向速度慢 转发的是同一次请求;重定向是两次不同请求 转发不会执行转发后的代码;重定向会执行重定向之后的代码 转发地址栏没有变化;重定向地址栏有变化 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成