【Flask专题】07.响应对象response(PyCharm)

本文详细介绍了Flask框架中响应对象response的使用,包括make_response()、jsonify()、render_template()和redirect()。通过示例代码展示了如何构建响应对象、序列化数据、渲染模板以及实现页面跳转功能,帮助理解Flask中视图函数的返回值处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

响应对象response(PyCharm)

视图函数的返回值会自动转换为一个相应对象;
make_response()用于构建response对象;
在视图函数的返回值可以是:

  1. string(系统自动会转换成一个response对象)
  2. make_response()构建的response对象,可添加一些头部信息
  3. dict
  4. 使用jsonify()序列化后的数据,jsonify()将不能当做返回值的数据(如列表。。)序列化,转换为response对象,用于返回
  5. render_template():将独立的模板和视图关联
  6. redirect():重定向

render_template()与redirect()的区别:
render_template():直接渲染模板,浏览器地址栏中的url不会改变,一次请求响应
redirect():重定向页面,用户发送请求(eg. http://127.0.0.1:5000/news),服务器接收到后返回一个response(eg. 包括head[‘location’]=‘/notfound’ code=302),用户接收到重定向后的信息,再次向服务器发送请求(eg. http://127.0.0.1:5000/notfound),服务器再根据路由返回

make_response():构建一个response对象,页面返回该对象

from flask import Flask, make_response
import settings

app = Flask(__name__)
app.config.from_object(settings)


@app.route('/')
def hello_world():
    return 'HELLO world!'  # 响应对象


@app.route('/abc')
def s_abc():
    s = '''<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>ABC</title>
            </head>
            <body>
                <h1>ABC</h1>
            </body>
            </html>
        '''

    response = make_response(s)
    # 在响应头添加键值对
    response.headers['name'] = 'yyf'
    return response


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

返回结果如下:
在这里插入图片描述

在这里插入图片描述

视图函数可以返回字典类型数据

from flask import Flask
import settings

app = Flask(__name__)
app.config.from_object(settings)


@app.route('/')
def hello_world():
    return 'HELLO hello hello hello world!'


@app.route('/abc')
def s_abc():
    dict = {'name': 'yyf', 'age': 20}
    return dict


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

返回结果:
在这里插入图片描述

使用jsonify()将数据转换成response对象,再返回

from flask import Flask, jsonify
import settings

app = Flask(__name__)
app.config.from_object(settings)


@app.route('/')
def hello_world():
    return 'HELLO hello hello hello world!'


@app.route('/abc')
def s_abc():
    list = ['a', 'v', 's', 'e', 'q']
    return jsonify(list)


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

返回结果:
在这里插入图片描述

使用render_template()渲染模板

from flask import Flask, render_template
import settings

app = Flask(__name__)   # template_folder: t.Optional[str] = "templates", 模板默认文件夹为templates
app.config.from_object(settings)


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


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

返回结果:
在这里插入图片描述

实现页面跳转功能

from flask import Flask, render_template, request
import settings

app = Flask(__name__)   # template_folder: t.Optional[str] = "templates", 模板默认文件夹为templates
app.config.from_object(settings)


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


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        pass
    return render_template('login.html')


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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
  <a href="/login">登录</a>
  <a href="">注册</a>
  <hr>
  <a href="">新闻</a>
  <a href="">体育</a>
  <a href="">热点</a>
</body>
</html>

当点击登录按钮,页面跳转到’/login’页面上

redirect()重定向页面

from flask import Flask, render_template, redirect
import settings

app = Flask(__name__)
app.config.from_object(settings)


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


news = []


@app.route('/news')
def show_news():
    if not news:
        return redirect('/notfound')        # URL:http://127.0.0.1:5000/notfound
        # return render_template('404.html')         # URL:http://127.0.0.1:5000/news


@app.route('/notfound')
def not_found():
    return render_template('404.html')


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


当点击新闻时,用户与浏览器发生两次请求响应,如下图:
在这里插入图片描述

Flask框架中,创建一个基础的Web应用程序通常包含以下几个步骤: 1. **基本结构** (路由与视图函数): - 首先,你需要导入`flask`库并创建一个实例`app`。 ```python from flask import Flask app = Flask(__name__) ``` - 使用`@app.route`装饰器定义路由和对应的视图函数。例如,处理根URL ("/") 的请求: ```python @app.route('/') def home(): return 'Hello, World!' ``` 视图函数接收请求并返回响应。 2. **运行方式**: - **IDE 下**: 在集成开发环境(如PyCharm或VSCode)内设置服务器,一般有自动热加载功能。 - **命令行下**: ```bash $ python your_flask_script.py ``` 这会启动Flask应用监听默认端口5000(可以配置`host`和`port`)。 3. **动态路由**: 使用变量构建动态路径,如`'/user/<username>'`。在视图函数里通过`request.args.get('username')`获取URL参数: ```python @app.route('/user/<username>') def user(username): return f'Hello, {username}' ``` 4. **请求对象(request)响应对象(response)**: - `request`是一个包含了所有关于HTTP请求的信息的对象,如请求方法(GET, POST等)、URL参数、请求体(如果为POST)等。 ```python request.method # 获取请求方法 request.values['key'] # 如果是GET请求,获取参数值 ``` - `response`是由`make_response()`函数创建的,可以设置状态码、头信息以及响应体。常见的例子是返回HTML响应: ```python response = make_response('<h1>Hello</h1>') response.headers["Content-Type"] = "text/html" return response ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值