HTTP协议是万维网数据通信的基础. 在这个协议上可以对同一URL使用不同的方法获取数据.
下面展示了几种不同的HTTP方法.
- GET 将未经加密的信息发送的服务器. 是最通用的方法.
- HEAD 该方法除了服务端不返回响应内容只返回头信息之外, 同GET是一样的.
- POST 用于向服务器发送HTML表单数据. POST请求不会被缓存.
- PUT 将URL所指示的资源用上传的内容替换.
- DELETE 将URL所指示的资源删除.
Flask路由默认处理的是GET请求, 但我们可以通过添加route()装饰器的参数来改变这点.
为便于演示URL路由中的POST方法, 我们创建一个HTML表单, 并用这个表单给URL发送数据.
将下面内容保存为login.html.
<html>
<body>
<form action = "http://localhost:5000/login" method = "post">
<p>Enter Name:</p>
<p><input type = "text" name = "nm" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
将下面这段Python代码保存并执行:
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
user = request.args.get('nm')
return redirect(url_for('success',name = user))
if __name__ == '__main__':
app.run(debug = True)
在开发模式下执行程序开启服务器后, 在浏览器中打开login.html, 会看到一个简陋的表单, 我们填入名字并提交.
然后表单就把数据POST到action所指示的URL上. http://localhost:5000/login
这个URL被绑定到login()
函数上, 一旦服务器通过POST方法接收到数据, 表单里nm
字段的值就从下面这段代码中获取到了:
user = request.form['nm']
然后这个值被作为变量传到了/success
这个URL上, 浏览器最终展示的是/success
URL下的welcome字样的信息.
我们把login.html中的action
改为GET
方法, 再次从浏览器中打开页面, 提交后, 服务器代码收到的是GET
请求, nm
字段的值这次用如下代码获取:
User = request.args.get(‘nm’)
这里, args
是由字段的名称和值组成的字典对象, nm
字段的值同样被传递到了/success
URL上.