[flask]响应数据+跳转页面

flask框架 如何启动flask项目, flask四剑客(返回字符串, 返回html, 跳转路由, 返回json), flask的配置文件, 路由本质以及参数, 自定义转化器, flask的模板渲染,flask的请求与响应, flask的session,闪现 - 战斗小人 - 博客园 (cnblogs.com)

一个很好的博客


flask默认支持两种响应方式

数据响应:默认响应html文本,也可以返回json格式或者其他格式

页面响应:重定向

响应的时候,flask也支持自定义http响应状态码


响应html文本
python 复制代码
from flask import Flask,make_response, Response

app = Flask(__name__)

app.config.update({
    "DEBUG": True
})


@app.route("/")
def index():
    # 默认返回的就是HTML代码,在flask内部调用视图时,得到的返回值会被flask判断类型,
    # 如果类型不是response对象,则视图的返回值会被作为response对象的实例参数返回客户端

    """响应HTML文本,并设置响应状态码"""
    # return "<h1>hello, flask</h1>", 400

    """通过make_response返回Response对象"""
    # response = make_response("<h1>hello, flask</h1>", 201)
    # print(response)
    # return response

    """通过Response返回Response对象"""
    response = Response("<h1>hello, flask</h1>", 201)
    return response


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

响应json数据
python 复制代码
from flask import Flask, jsonify
from decimal import Decimal
app = Flask(__name__)

app.config.update({
    "DEBUG": True,
    "JSONIFY_PRETTYPRINT_REGULAR": False,
})


@app.route("/")
def index():
    # """返回json格式数据,返回json字典"""
    # data = {"name":"xiaoming","age":16}
    # return json.dumps(data), 200, {"Content-Type": "application/json"}
    # return Response(json.dumps(data), 200, {"Content-Type": "application/json"})

    """响应json数据[jsonify]"""
    data = {"name": "xiaoming", "age": 16}
    response = jsonify(data)
    print(response)
    return response

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

响应图片
python 复制代码
from flask import Flask, Response

app = Flask(__name__)

app.config.update({
    "DEBUG": True,
    "JSONIFY_PRETTYPRINT_REGULAR": False,
})


@app.route("/")
def index():
     """响应图片格式给客户端"""
    with open("avatar.png", "rb") as f:
        data = f.read()
    return data, 200, {"Content-Type": "image/png"}  # MIME类型

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

flask的url、页面跳转和重定向_flask 转向网址-CSDN博客

一般我们通过一个url就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个url呢?url_for函数就可以实现这个功能。url_for()函数接受两个及以上的参数,它接受函数名作为第一个参数,接受对应的url规则的命名参数。如果还出现其他的参数。则会添加到url的后面作为查询参数。

通过构建url的方式而选择直接在代码中拼url的原因有两点

将来如果修改了url,但没有修改该url对应的函数名,就不用到处去替换url了。

url_for()函数会转义一些特殊字符和unicode字符串,这些事情url_for会自动地帮我们搞定。

重定向分为永久性重定向暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面,比如用户访问需要权限的页面,但是该用户当前并没有登录,因此我们需要给他重定向到登录页面。

永久性重定向:http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问。

暂时性重定向:http的状态码是302,表示页面的暂时性跳转,比如访问一个需要权限的网址,如果该用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。

在flask中,重定向就是通过flask.redirect(location,code=302)这个函数来实现的,location表示需要重定向到的url,应该配合之前讲的url_for()函数来实现,code表示采用哪个重定向,默认是302也暂时性重定向,可以修改成301来实现永久性重定向。

页面跳转
python 复制代码
from flask import Flask, request, redirect, url_for, Response


app = Flask(__name__)


@app.route("/user")
def index():
    if request.args.get("token"):
        return "个人中心"

    # 跳转页面到登录视图中
    # redirect("url地址") # 控制页面跳转到任意路径下
    # return redirect("/login")

    # 跳转页面到其他视图中
    url = url_for("login")  # url_for("视图名称")
    print(app.url_map)  # 路由列表,整个flask站点中所有的url地址和视图的映射关系都在这个属性里面
    print(url)
    return redirect(url)


@app.route("/login")
def login():
    return "登录视图"


@app.route("/jump")
def jump():
    """跳转页面到站外"""
    """
    301: 永久重定向,页面已经没有了,站点没有了,永久转移了。[域名映射-->域名解析]
    302:临时重定向,一般验证失败、访问需要权限的页面进行登录跳转时,都是属于临时跳转。
    """
    # response = redirect("https://www.qq.com", 302)
    # 上面会跳转到qq的页面
    # print(response)
    # return response

    # 底层原理
    response = Response("", 302, {"Location": "https://www.163.com"})
    return response


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

跳转页面到有路由参数的地址
python 复制代码
from flask import Flask, request, redirect, url_for, Response


app = Flask(__name__)


@app.route("/mobile/<int:mobile>")
def sms(mobile):
    """发送短信"""
    return f"发送短信给{mobile}"


@app.route("/info")
def info():

    # 跳转页面到一个具有路由参数的视图中
    # return redirect("/sms/13012345678")

    url = url_for("sms", mobile="13012345677")
    print(url)  # /sms/13012345677
    return redirect(url)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

自定义响应头

python 复制代码
from flask import Flask, request, redirect, url_for, Response

app = Flask(__name__)

@app.route("/")
def index():
    """自定义响应头"""
    return "hello, flask", 201, {"Company": "flask.edu"}

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)
相关推荐
程序猿000001号2 分钟前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
zjw_rp4 分钟前
Spring-AOP
java·后端·spring·spring-aop
engchina33 分钟前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
Dream_Snowar1 小时前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶1 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
机器之心2 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
.生产的驴3 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
顽疲3 小时前
springboot vue 会员收银系统 含源码 开发流程
vue.js·spring boot·后端
机器之心3 小时前
AAAI 2025|时间序列演进也是种扩散过程?基于移动自回归的时序扩散预测模型
人工智能·后端