[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)
相关推荐
何大春几秒前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天9 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS12 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
EterNity_TiMe_17 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
Suyuoa28 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
Iced_Sheep41 分钟前
干掉 if else 之策略模式
后端·设计模式
XINGTECODE1 小时前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
程序猿进阶1 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺1 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端
好看资源平台2 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python