当前位置:   article > 正文

Flask的Request、Response以及异常_make_response 302

make_response 302

一.Request

1.介绍

request是一个内置对象,不需要创建就可以直接使用的对象。
在centos中可以直接导入flask的request
在ubuntu中导入的是flask.global的request

2.属性

(1)method

method是请求方法,可以使用request.method来获取请求方法。

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.method)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

(2)base_url

base_url是去掉get参数的url,获取形式为:主机+端口号+资源路径

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.base_url)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

(3)host_url

host_url是只有主机和端口号的url,获取形式为:主机+端口号

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.host_url)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

(4)url

url是完整的请求地址,获取形式为:主机+端口号+资源路径+参数

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.url)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

(5)remote_addr

remote_addr是获取请求的客户端地址

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.remote_addr)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

(6)request.args.get(‘name’)

args是get请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.args)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述
当有相同的参数名字的时候,返回值是第一个符合条件的值。

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.args.get('name'))
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述
要想要获取所有的符合条件的值

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.args.getlist('name'))
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

注意:一般情况下 get请求方式都是在浏览器的地址栏上显示
例如:http://www.baiduc.com/s?name=yuanfate&age=18

(7)request.form.get(‘name’)

form的存储结构和args一致,默认是接收post参数,还可以接收 PUT,PATCH参数。
和get请求方法返回的是同一种数据类型。

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.form)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

这个需要在postman上进行调试
在这里插入图片描述
运行结果:
在这里插入图片描述

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.form.get('name'))
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4
@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.form.getlist('name'))
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

(8)headers

headers是可以用来获取请求头

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.headers)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

(9)path

path是用来获取请求资源路径

@blue.route('/testRequest/', methods=['get', 'post'])
def testRequest():
    print(request.path)
    return 'testRequest'
  • 1
  • 2
  • 3
  • 4

运行结果:
在这里插入图片描述

二.Response

1.返回字符串

如果只有字符串,就是返回内容,数据还有第二个返回,放的是状态码

@blue.route('/testResponse/')
def testResponse():
    return 'testResponse',404
  • 1
  • 2
  • 3

运行结果:
在这里插入图片描述

2.返回模板

render_template渲染模板,将模板变成字符串。
在templates包中添加名为testResponse1的html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        <li>源一</li>
        <li>源二</li>
    </ul>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在views文件中

@blue.route('/testResponse1/')
def testResponse1():
    # render_template方法返回的是字符串,所以可以直接返回
    a = render_template('testReponse1.html')
    print(type(a))
    return a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行结果:
在这里插入图片描述

3.make_response

make_response获取的值类型是Response对象,这是与上面的唯一区别。

@blue.route('/testResponse2/')
def testResponse2():
    res = make_response('<h1>Hello World</h1>')
    print(type(res))
    return res
  • 1
  • 2
  • 3
  • 4
  • 5

运行结果:
在这里插入图片描述

4.Response对象

Response获取的值类型是Response对象.

@blue.route('/testResponse3/')
def testResponse3():
    # <class 'flask.wrappers.Response'>
    res = Response('<h1>My World</h1>')
    print(type(res))
    return res
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行结果:
在这里插入图片描述

5.重定向

redirect:重定向,就是重新执行别的请求,其状态码是302

@blue.route('/index/')
def index():
    return 'index'
  • 1
  • 2
  • 3

如何在执行完testResponse4,去执行index的路由?

@blue.route('/testResponse4/')
def testResponse4():
    return redirect('/index/')
    a = url_for('blue.index')
    print(a)
    return redirect(a)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上面虽然可以实现我们的需求,但是值得注意的是,在实际的企业级开发中,一定要避免硬编码,不要将路径写死。
所以我们可以结合反向解析使用。

@blue.route('/testResponse4/')
def testResponse4():
    # <class 'werkzeug.wrappers.response.Response'>
    a = redirect(url_for('blue.index'))
    print(type(a))
    return a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行结果:
在这里插入图片描述

6.返回值类型

视图函数的返回值类型可以分为字符串response两类。
返回值类型为字符串的有:普通的字符串、render_template
返回值类型为response的有:make_response、response、redirect

三.异常

1.抛出异常

abort会直接抛出,显示错误状态码,终止程序运行

@blue.route('/testAbort/')
def testAbort():
    # 抛出异常
    abort(405)
    return 'testAbort'
  • 1
  • 2
  • 3
  • 4
  • 5

运行结果:
在这里插入图片描述

2.捕获异常

@blue.errorhandler()可以用来异常捕获,其会根据状态或 Exception进行捕获,并且函数中要包含一个参数,参数用来接收异常信息。

@blue.errorhandler(405)
def testAbort1(exception):
    return '系统正在升级。。。。'
  • 1
  • 2
  • 3

运行结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/414371
推荐阅读
相关标签
  

闽ICP备14008679号