Flask 客户端数据交互:使用request获取客户端数据
2021-01-07 本文已影响0人
xiaogp
摘要:Flask
Flask 中由全局的request
对象来提供Web 应用中客户端发送给服务器的数据交互,使用from flask import request
导入
request.args
request.args
获取url中传递的参数,使用to_dict()
转化为key value对,value的类型为字符串,比如传递url为http://127.0.0.1:5000/?name=gp&age=11输出{'name': 'gp', 'age': '11'}
@app.route('/', methods=['GET'])
def index():
data = request.args.to_dict() # {'name': 'gp', 'age': '11'}
name = data.get('name')
age = data.get('age')
return data
request.form
request.form
获得form表单中传递的数据,通过html中form标签
的name
属性作为key获得对应的value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% macro input(name, type='text', value='') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}
<form action="/" method="post">
<p>用户名:{{ input('username') }}</p>
<p>密码:{{ input('password', type='password') }}</p>
{{ input('submit', type='submit', value='提交') }}
</form>
</body>
</html>
页面点击submit按钮会将当前form中(submit所在form)所有定义的带有name的数据从客户端发送给服务端,没有name的request拿不到数据
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html')
elif request.method == 'POST':
data = request.form.to_dict()
print(data) # {'username': '', 'password': '', 'submit': '提交'}
username = data.get('username')
password = data.get('password')
submit = data.get('submit')
return '登录成功'
request.values
request.value
将url和form的数据一起返回,修改form标签中action
为一个带有参数的url
<form action="/?value=3" method="post">
<p>用户名:{{ input('username') }}</p>
<p>密码:{{ input('password', type='password') }}</p>
{{ input('submit', type='submit', value='提交') }}
</form>
此时POST请求带有url数据和form数据,都返回在一个字典中,如果key冲突,url中数据会覆盖form数据
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html')
elif request.method == 'POST':
data = request.values.to_dict() # {'username': '', 'password': '', 'submit': '提交', 'value': '3'}
print(data)
return '登录成功'
request.files
request.files
获得上传的文件,修改form标签中type为file
,enctype属性设置为multipart/form-data
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
import os
from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'GET':
return render_template('upload.html')
elif request.method == 'POST':
file = request.files['file']
filename = secure_filename(file.filename)
print(os.path.join('static/upload', filename))
file.save(os.path.join('static/upload', filename))
return "上传成功"
request.json / request.get_json()
如果客户端传入的数据是application/json
,可以使用request.json
获得数据
@app.route('/', methods=['POST'])
def index():
data = request.json
print(data)
text = data.get('text')
return "success"
也可以使用get_json
,force=True属性可以强转忽略mimetype
@app.route('/', methods=['POST'])
def index():
data = request.get_json(force=True)
print(data)
text = data.get('text')
return "success"
使用requests
模块对url进行post请求操作,指定json属性
res = requests.post('http://127.0.0.1:5000', json={'text': '123'})
request其他属性
-
request.method
:获得请求方法 -
request.endpoint
:获得url名 -
headers
:获得请求头 -
cookies
:获得请求的cookies