添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Flask 重定向和HTTP方法 GET、POST

Flask URL构建

Redirect重定向

url_for() 函数对于动态构建特定函数的URL非常有用。

url_for() 函数接受 函数的名称 作为 第一个参数 ,以及一个或 多个关键字参数 ,每个参数对应于URL的变量部分。

以下脚本演示了如何使用 url_for() 函数:

from flask import Flask, redirect, url_for
app = Flask(__name__)
# 重定向admin
@app.route('/admin')
def hello_admin():
   return 'Hello Admin'
# 重定向guest
@app.route('/guest/<guest>')
def hello_guest(guest):
   return 'Hello %s as Guest' % guest
# 程序主入口
@app.route('/user/<name>')
def hello_user(name):
   if name =='admin':
      return redirect(url_for('hello_admin'))
   else:
      return redirect(url_for('hello_guest', guest = name))
if __name__ == '__main__':
   app.run(debug=True)

这里注意url_for的第一个参数是函数名而不是路由名称





效果截图

访问 http://localhost:5000/user/admin



控制台输出



访问 http://localhost:5000/user/user1



控制台输出



Flask HTTP方法

Http协议是万维网中数据通信的基础。在该协议中定义了从指定URL检索数据的不同方法。

下表总结了不同的http方法:

序号 方法与描述
1 GET:以未加密的形式将数据发送到服务器,是最常见的方法。
2 HEAD:和GET方法相同但是没有响应体。
3 POST:用于将HTML表单数据发送到服务器,POST方法接受的数据不由服务器缓存。
4 PUT:用于上传内容替换目标资源的所有当前表示。
5 DELETE:删除由URL给出的目标支援的所有当前表示。

常用的方法主要是 GET POST

默认情况下,Flask路由响应 GET 请求。但是,可以通过为 route() 装饰器提供方法参数来更改此首选项。

为了演示在URL路由中使用 POST 方法,首先让我们创建一个HTML表单,并使用 POST 方法将表单数据发送到URL。

将以下脚本另存为login.html( 注意新建文件夹templates并将HTML文件放在对应文件夹下



<html>
      <form action = "http://localhost:5000/login" method = "post">
         <p>请输入名称:</p>
         <p><input type = "text" name = "name" /></p>
         <p><input type = "submit" value = "submit" /></p>
      </form>
   </body>
</html>

编写Flask-Code

from flask import Flask, redirect, url_for, request, render_template
app = Flask(__name__)
# 路由到Login模板HTML
@app.route('/')
def index():
    return render_template("login.html")
@app.route('/success/<name>')
def success(name):
    return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      print(1)
      user = request.form['name']
      return redirect(url_for('success',name = user))
   else:
      print(2)
      user = request.args.get('name')
      return redirect(url_for('success',name = user))