Flask项目入门—request以及Response

发布于:2024-11-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

导入

request(请求)以及Response(响应)通过flask导入,如下:

from flask import Blueprint, request, render_template, \
    jsonify, make_response, Response, redirect, url_for, abort

request:

默认请求不支持post请求,如果需要同时支持GET和POST,就需要路由设置methods,比如

# 路由名称request
# methods请求方法
@blue.route('/request/', methods=['GET', 'POST'])
def get_request():

先看客户端向服务器发送的请求示例,

http://127.0.0.1:5000/request/?name=jianghoufu&name=chenguili&age=33

(1)request.method)请求方式        

在上面视图函数get_request中,我打印request.method

 print(request.method)
 # 输出 GET
(2)request.args:GET请求的参数

request.args是ImmutableMultiDict: 类字典对象,它跟字典的区别是可以出现重复的key

视图函数中打印request.args得到如下

print(request.args)
#ImmutableMultiDict([('name', 'jianghoufu'), ('name', 'chenguili'), ('age', '33')])

print(request.args['name'], request.args['age'])
# jianghoufu 33

print(request.args.get('name'))
# jianghoufu

print(request.args.getlist('name'))
# ['jianghoufu', 'chenguili']
(3)request.form:POST请求的参数

该类型同样是ImmutableMultiDict: 类字典对象,类似request.args

print(request.form)  
# ImmutableMultiDict([('name', 'jianghouf'), ('age', '33')])
print(request.form.get('name'))  # lucy
(4)print(request.path) # /request/
(5)print(request.url) # http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33
(6)print(request.base_url) # http://127.0.0.1:5000/request/
(7)print(request.host_url) # http://127.0.0.1:5000/
(8)print(request.remote_addr) # 127.0.0.1,客户端的ip

(9)print(request.files) # 文件内容 ,ImmutableMultiDict([])
(10)print(request.headers) # 请求头
(11)print(request.user_agent) # 用户代理,包括浏览器和操作系统的信息 , python-requests/2.28.2

Response

        当我们请求接口过来的是欧响应可以返回json或者html等

# 响应的几种方式
    # 1. 返回字符串(不常用)
    # return 'response OK!'

    # 2. 模板渲染 (前后端不分离)
    # return render_template('index.html', name='张三', age=33)

    # 3. 返回json数据 (前后端分离)
    data = {'name': '李四', 'age': 44}
    # return data

    # jsonify(): 序列化,字典=>字符串
    # return jsonify(data)

    # 4. 自定义Response对象
    html = render_template('index.html', name='张三', age=33)
    print(html, type(html))  # <class 'str'>

    # res = make_response(html, 200)
    res = Response(html)

    #这里是重定向到home
    response = redirect('/home/')
    return response

特别注意这里的Response,他是一种返回类型,视图函数可以返回json,html,模版,也可以自定义,比如Response(html),比如response = redirect('/home/')
return response

redirect(重定向)

重定向的几种方式

(1)return redirect('https://www.qq.com')

(2)redirect('/response/')

(3)通过url_for():反向解析,通过视图函数名反过来找到路由

        url_for('蓝图名称.视图函数名')

        ret = url_for('user.get_response')

        redirect(ret)

        上面的含义是重定向到蓝图名称为user下的视图函数get_response对应的路由

abort

主动抛出异常

比如:abort(500)