[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)
相关推荐
AskHarries11 分钟前
Java字节码增强库ByteBuddy
java·后端
海阔天空_201324 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
佳佳_25 分钟前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
零意@32 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下43 分钟前
Python基础学习_01
python
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀1 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
许野平2 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python