flask 获取数据

作者: Benny_浩 | 来源:发表于2017-11-22 22:04 被阅读72次

一、后台获取请求数据

1、POST请求
前台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单请求</title>
</head>
<body>
    <div>
        <form action="/test/" method="POST">
            <div>
                <label for="username">用户</label>
                <input type="text" name="username" id="username" />
            </div>
            <div>
                <label for="password">密码</label>
                <input type="password" name="password" id="password" />
            </div>
            <div>
                <input type="submit" value="提交" />
            </div>
        </form>
    </div>
</body>
</html>

后台

from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('test.html')

@app.route('/test/', methods=['GET', 'POST'], endpoint='test01')
def test():
    getData = request.args # 利用request对象获取GET请求数据
    print('获取的GET数据为:', getData) # 打印获取到的GET数据 ImmutableMultiDict([])
    postData = request.form # 利用request对象获取POST请求数据
    print('获取的POST数据为:', postData) # 打印获取到的POST请求 ImmutableMultiDict([('username', '456'), ('password', '789')])
    username = request.form.get('username') 
    password = request.form.get('password')
    print(username,password) #456 789
    return '这是测试页面'

if __name__ == '__main__':
    app.run(debug=True)

如果username有多个值,可以用request.form.getlist('username'),该方法将返回一个列表。

2、GET请求
前台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单请求</title>
</head>
<body>
    <div>
        <form action="/test/" method="GET"> //改变请求方式
            <div>
                <label for="username">用户</label>
                <input type="text" name="username" id="username" />
            </div>
            <div>
                <label for="password">密码</label>
                <input type="password" name="password" id="password" />
            </div>
            <div>
                <input type="submit" value="提交" />
            </div>
        </form>
    </div>
</body>
</html>

后台

from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('test.html')

@app.route('/test/', methods=['GET', 'POST'], endpoint='test01')
def test():
    getData = request.args # 利用request对象获取GET请求数据
    print('获取的GET数据为:', getData) # 打印获取到的GET数据 ImmutableMultiDict([('username', '456456'), ('password', '667788')])
    postData = request.form # 利用request对象获取POST请求数据
    print('获取的POST数据为:', postData) # 打印获取到的POST请求 ImmutableMultiDict([])
    username = request.args.get('username')   #使用args获取get请求数据
    password = request.args.get('password')
    print(username,password) #456456 667788
    return '这是测试页面'

if __name__ == '__main__':
    app.run(debug=True)

3、AJAX POST请求
前台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax请求</title>
    <script src="../static/jquery-1.10.2.min.js"></script>
</head>
<body>
    ajax请求测试页面
    <script>
        data = {
            "username": "warrior",
            "password": "123321"
        };
        url = "/test/";
        $.post(url, data);
    </script>
</body>
</html>

后台

from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('test.html')

@app.route('/test/', methods=['GET', 'POST'], endpoint='test01')
def test():
    postData = request.form  # 获取ajax的请求参数(请求方式时post)
    print('post形式的ajax请求参数:', postData)  # 打印获取到的参数 ImmutableMultiDict([('username', 'warrior'), ('password', '123321')])
    print(request.form.get('username')) # 获取指定的参数 warrior
    print(request.form.get('password')) # 获取指定的参数 123321

    getData = request.args  # 获取ajax的请求参数(请求方式时get)
    print('get形式的ajax请求参数:', getData) get形式的ajax请求参数: ImmutableMultiDict([])
    print(request.args.get('password')) None
    return '这是测试ajax请求页面'

if __name__ == '__main__':
    app.run(debug=True)

4、AJAX GET请求
前台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax请求</title>
    <script src="../static/jquery-1.10.2.min.js"></script>
</head>
<body>
    ajax请求测试页面
    <script>
        data = {
            "username": "warrior",
            "password": "123321"
        };
        url = "/test/";
        $.get(url, data);
    </script>
</body>
</html>

后台

from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('test.html')

@app.route('/test/', methods=['GET', 'POST'], endpoint='test01')
def test():
    postData = request.form  # 获取ajax的请求参数(请求方式时post)
    print('post形式的ajax请求参数:', postData)  # 打印获取到的参数 ImmutableMultiDict([])
    print(request.form.get('username')) # 获取指定的参数 None
    print(request.form.get('password')) # 获取指定的参数 None
 
    getData = request.args  # 获取ajax的请求参数(请求方式时get)
    print('get形式的ajax请求参数:', getData) #ImmutableMultiDict([('username', 'warrior'), ('password', '123321')])
    print(request.args.get('username')) #warrior
    print(request.args.get('password')) #123321
    return '这是测试ajax请求页面'

if __name__ == '__main__':
    app.run(debug=True)

二、后台视图函数的返回值类型

1、字符串
2、元组

return (需要返回的数据, 状态码, 响应信息)
----数据必须是字符串,相应信息是字典,默认{}

return ('{"username":"yhao"}',200,{"Content-Type":"test/json"})

3、response对象

resp = Response('hello world')
resp.status_code = 200
resp.headers["Content-Type"] = "test/json"

三、补充

request

# 获取表单提交数据, 仅用于表单
request.form.get('begin', '')
# 获取POST数据
request.json
# 获取GET参数
request.args.get('q', '')
# 处理get请求
data = request.get_json(silent=False)
# 获取用户真实IP
if request.headers.getlist('X-Forwarded-For'):
    ip = request.headers.getlist('X-Forwarded-For')[0]
else:
    ip = request.remote_addr

相关文章

网友评论

    本文标题:flask 获取数据

    本文链接:https://www.haomeiwen.com/subject/rawovxtx.html