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

12 篇文章 0 订阅
11 篇文章 0 订阅

响应对象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()


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值