Python学习web框架开发

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其他属性

上一篇 下一篇

猜你喜欢

热点阅读