1、Response

在flask中你想向前端返回数据,必须是Response的对象,这里和django必须是HttpResponse 对象一样, 主要将返回数据的几种方式

  1. 视图函数中return 字符串

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/index")
    def index():
    return "index.html" if __name__ == "__main__":
    app.run()
  2. return 多个值

    @app.route("/page_one")
    def page_one():
    return "index.html", "200 Ok", {"name": "aaa"}

    return后面的值说明:index.html 表示字符串,也就是网站页面显示的内容

    '200 ok' 表示状态码和对状态码的解析

    {"name":"aaa"} 表示请求头

    请求头不是必须要的,但是前面两个必须要,前提你是retrun多个值,还有就是顺序不能改变。

  3. return make_response

    @app.route("/page_two")
    def page_two():
    response = make_response('page_two page', 200)
    response.headers["name"] = "page_four"
    return response @app.route("/page_three")
    def page_three():
    response = make_response('page_three page')
    return response, 200, {"name": "page_three"} @app.route("/page_four")
    def page_four():
    response = make_response('page_four page', 200, {"name": "page four"})
    return response

    分析下上面的三种方法,都是能够成功返回的。总结下

    make_response 它可以传递三个参数 第一个还是一个字符串,第二个传状态码,第三个传请求头,

    关于return 还是和 return 多个值分析差不多,只不过第一个参数不是字符串,而是一个对象了。

  4. return Response对象

    from flask import Response
    
    @app.route("/page_five")
    def page_five():
    response = Response("page five")
    response.status_code = 299
    response.status = "298 notok"
    return response, "297 okok", {"name": "page fiv"}

总结:

  1. 视图函数可以返回一个元组(也就是多个值),返回多个值的话,必须注意顺序,第一位必须为字符串或者Response对象,第二个参数应该为状态码,第三个参数就是请求头里的数据了
  2. 如果返回一个值的话,那么就是一个字符串,或者就是Response对象
  3. 还有就是make_response这个函数的返回值应该也是Response的对象,额额,刚刚打印了type(make_response()) 结果为 flask.wrappers.Response ,确实是Response的对象。

render_template : 导入方式 from flask import render_template

def render_template(template_name_or_list, **context):
pass

它的作用就是模板渲染,最终返回html渲染好了的字符串,它需要传递的参数就是 模板的名字,也就是需要渲染的html页面,还有就是这样格式的数据:key1 = value1,key2=value2这样的格式,传这些变量到模板中,肯定是渲染变量用。

redirect :导入方式 from flask import redirect

def redirect(location, code=302, Response=None):
pass

它的作用就是重定向,需要传的参数就是重定向的地址,最终返回的Response的对象

2、Response中的几个属性

  1. headers : 设置请求头信息
  2. status : String类型的数据,格式为这种:"200 ok"
  3. status_code : int 类型,就是状态码,但是不能是自定义的状态码
  4. data : 需要返回到前端的数据
  5. set_cookie :设置cookie 的值
  6. del_cookie :删除cookie ,不会立马删除浏览器上报错的cookie 值,会讲过期时间设置为当前时间,还是cookie 创建的时间,这样就表示过期了,浏览器会自动删除。

3、写一个登陆成功设置cookie的例子

from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/login', methods=["get", "post"], endpoint='login')
def login():
if request.method == "POST":
response = Response()
name = request.form.get("name")
pwd = request.form.get("pwd")
if name and pwd:
if name == '朱宇' and pwd == '123':
response.data = '登陆成功'
# 注意,我这里只是写个例子,不会拿明文的账号密码设置为cookie
response.set_cookie('name', '朱宇')
response.set_cookie('pwd', '123')
else:
response.data = '用户名或密码错误'
else:
response.data = '用户名或密码不能为空'
return response
elif request.method == 'GET':
# 我这里返回字符串表示一个页面,你完全可以写一个html页面,使用render_template这个方法返回
return 'login.html' if __name__ == "__main__":
app.run(debug=True)

下面我用postman做下测试,

再看上面红色狂圈住的地方,这就是我们设置的两个cookies,鼠标点进去看

你们有这样的疑问的吗?我最终还是返回的Response的对象,那么浏览器是怎么知道我对cookie进行操作呢?

答案在这里,就是响应的请求头,看看返回了哪些数据

Response 的介绍大概就是这样,还有其他属性请参考flask官方API

flask中的response的更多相关文章

  1. Flask 中的 Response

    1.Flask中的HTTPResponse @app.route("/") # app中的路由route装饰器 def index(): # 视图函数 return "I ...

  2. 通过flask中的Response返回json数据

    使用flask的过程中,发现有时需要生成一个Response并返回.网上查了查,看了看源码,找到了两种办法: from flask import Response, json Response(jso ...

  3. python web开发-flask中response,cookies,session对象使用详解

    Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...

  4. flask中的request和response

    1.request 1.request的常用成员 1.scheme : 获取请求方案(协议) 2.method : 获取本期请求的请求方式(重点) 3.args : 获取使用get请求方式提交的数据 ...

  5. Flask Response响应(flask中设置响应信息的方法,返回json数据的方法)

    设置响应信息的方法 1.  返回自定义的响应头,有两种方式: (1)  第一种是:视图函数return的时候,使用元组,返回自定义的信息 返回的时候的状态码可以自定义信息:"状态码   自定 ...

  6. Flask中全局变量的实现

    我们都知道在Flask中g,request,session和request是作为全局对象来提供信息的,既然是全局的又如何保持线程安全呢,接下来我们就看看flask是如何做到这点的.在源码中的ctx.p ...

  7. flask中下载服务器上特定路径的文件

    使用flask下载服务器上某个路径下的文件 path:文件路径以及需要下载的文件,直接写入参数有安全隐患,实际应用中需要判断权限之类的 from flask import send_file, mak ...

  8. Flask中使用cookie和session

    Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/ ...

  9. Python框架学习之Flask中的视图及路由

    在前面一讲中我们学习如何创建一个简单的Flask项目,并做了一些简单的分析.接下来在这一节中就主要来讲讲Flask中最核心的内容之一:Werkzeug工具箱.Werkzeug是一个遵循WSGI协议的P ...

随机推荐

  1. mvc 页面简单get获取后台数据

    后台方法 public ActionResult Linq() { var lt = UserSys.FindAll(); Hashtable ht = new Hashtable(); ht.Add ...

  2. .net编程知识点

    一.编程思想 OOP(面向对象) 面向对象三大特性(多态如何体现)及五项原则 AOP(面向切面编程) 面向切面编程静态植入和动态植入 二.c#23种设计模式 三.Castle是针对.NET平台的一个开 ...

  3. (0!=0)==true? 记一个匪夷所思的问题

    最近换了份工作,公司的开发框架是基于SSH自己搭建的.这个问题是我在解决一个需求的时候遇到的,其实解决这个疑惑的过程也就是读框架源码的过程,特此记录一下. 问题:ba.getState()!=CbBa ...

  4. 亲测,很有效的忽略SSL证书方法

    1.在httpclient发起请求时,有时会出现下面这种情况 你的日志中出现有关SSL的异常,javax.net.ssl.SSLPeerUnverifiedException: peer not au ...

  5. Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean

    1 解析 2.1 @bean注解定义 2.2 @bean注解的使用 2 代码演练 2.1 @bean的应用不带name 2.2 @bean的应用带name   2.3 @bean注解调用initMet ...

  6. stark——增删改页面

    一.制作添加页面 1.前置准备 (1)修改增删改的视图函数名 class ModelStark(object): def add_view(self, request): return HttpRes ...

  7. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串

    一.概述 不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的. 二.代码 ...

  8. 嵌入式开发 MCU

    From: http://www.infoq.com/cn/articles/intelligent-embedded-os-Internet-of-things-and-robots 嵌入式开发是一 ...

  9. PHP header() session_start() 函数前为什么不能有输出?

    前阵面试遇到的问题,当时没答上来,后来查了些资料,仍未得到答案.今天研究HTTP请求,终于知道了答案. HTTP 函数允许在其他输出被发送之前,对由 Web 服务器发送到浏览器的信息进行操作. HTT ...

  10. 排查在 Azure 中创建新 Linux 虚拟机时遇到的 Resource Manager 部署问题

    本文内容 常见问题 收集活动日志 问题:自定义映像:预配错误 问题:自定义/库/应用商店映像:分配失败 后续步骤 尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. ...