flask中的response
1、Response
在flask中你想向前端返回数据,必须是Response
的对象,这里和django必须是HttpResponse
对象一样, 主要将返回数据的几种方式
视图函数中return 字符串
from flask import Flask app = Flask(__name__) @app.route("/index")
def index():
return "index.html" if __name__ == "__main__":
app.run()
return 多个值
@app.route("/page_one")
def page_one():
return "index.html", "200 Ok", {"name": "aaa"}return后面的值说明:
index.html
表示字符串,也就是网站页面显示的内容
'200 ok'
表示状态码和对状态码的解析
{"name":"aaa"}
表示请求头请求头不是必须要的,但是前面两个必须要,前提你是retrun多个值,还有就是顺序不能改变。
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
多个值分析差不多,只不过第一个参数不是字符串,而是一个对象了。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"}
总结:
- 视图函数可以返回一个元组(也就是多个值),返回多个值的话,必须注意顺序,第一位必须为字符串或者Response对象,第二个参数应该为状态码,第三个参数就是请求头里的数据了
- 如果返回一个值的话,那么就是一个字符串,或者就是Response对象
- 还有就是
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中的几个属性
headers
: 设置请求头信息status
:String
类型的数据,格式为这种:"200 ok"
status_code
:int
类型,就是状态码,但是不能是自定义的状态码data
: 需要返回到前端的数据set_cookie
:设置cookie
的值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的更多相关文章
- Flask 中的 Response
1.Flask中的HTTPResponse @app.route("/") # app中的路由route装饰器 def index(): # 视图函数 return "I ...
- 通过flask中的Response返回json数据
使用flask的过程中,发现有时需要生成一个Response并返回.网上查了查,看了看源码,找到了两种办法: from flask import Response, json Response(jso ...
- python web开发-flask中response,cookies,session对象使用详解
Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...
- flask中的request和response
1.request 1.request的常用成员 1.scheme : 获取请求方案(协议) 2.method : 获取本期请求的请求方式(重点) 3.args : 获取使用get请求方式提交的数据 ...
- Flask Response响应(flask中设置响应信息的方法,返回json数据的方法)
设置响应信息的方法 1. 返回自定义的响应头,有两种方式: (1) 第一种是:视图函数return的时候,使用元组,返回自定义的信息 返回的时候的状态码可以自定义信息:"状态码 自定 ...
- Flask中全局变量的实现
我们都知道在Flask中g,request,session和request是作为全局对象来提供信息的,既然是全局的又如何保持线程安全呢,接下来我们就看看flask是如何做到这点的.在源码中的ctx.p ...
- flask中下载服务器上特定路径的文件
使用flask下载服务器上某个路径下的文件 path:文件路径以及需要下载的文件,直接写入参数有安全隐患,实际应用中需要判断权限之类的 from flask import send_file, mak ...
- Flask中使用cookie和session
Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/ ...
- Python框架学习之Flask中的视图及路由
在前面一讲中我们学习如何创建一个简单的Flask项目,并做了一些简单的分析.接下来在这一节中就主要来讲讲Flask中最核心的内容之一:Werkzeug工具箱.Werkzeug是一个遵循WSGI协议的P ...
随机推荐
- python数据处理
1.数据清洗 1.1 数据格式化 数据格式化是数据清洗常见的形式之一,就是将可读性差的或无法阅读的数据转换成可读性较强的数据格式. python对字符串和数字都有格式化的方法,如%s, %d分别代表格 ...
- 安装VS2013时,如何避开IE10的限制
安装VS2013时,如何避开IE10的限制 VS就会告诉我们目前环境不适合安装VS2013,必须升级IE版本到IE10. 如果不想安装IE10,有没有办法呢? 答案肯定是有的. 将下面一段文字,储存为 ...
- Nginx管理(一)
一.Nginx介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务. 1.Nginx历史和特性 Nginx是由伊戈尔·赛索耶夫为俄罗斯 ...
- 靠谱的div引入任何外链内容
靠谱的div引入任何外链内容 开发中经常要在div中引入一个页面,该页面可能是内部页面,可能是一个外部页面,也可能只是一个域名获取的请求. 对于内部页面的加载,建议使用jquery的load函数,如: ...
- 小程序 - 图片列表显示lazyload效果
在做一个短视频平台,涉及到的都是一些列表模块.因为小程序没有提供lazyload api,所以只能自己写一个了... 开发涉及 <scroll-view></scroll-view& ...
- Java访问控制权限
在Java中一共存在四种访问控制权限,即 private.default(默认).protected和public 1.private 访问权限 private属于私有访问权限,可以用在属性的定义.方 ...
- 我的书单mybooklist
首先自我介绍一下,我是一名程序员. 计算机的世界太浩瀚,而我太过渺小. 比计算机的世界更为广大的是,书籍的海洋.学海无涯. 无论是计算机的世界,还是其他类书的世界,人一辈子要看的书看也看不完. 于是我 ...
- 使用gulp解决外部编辑器修改Eclipse文件延迟刷新
本人前端用惯了Hbuilder,修改了eclipse项目中的文件后,由于是外部编辑器修改过的,eclipse不会自动部署更新,一般按F5刷新项目,或者在 preferences > genera ...
- mysql修改管理员密码
mysql修改管理员密码杀掉mysql进程kill `cat /data/mysqldata/3306/mysql.pid`禁止连接禁止验证方式启动mysqlmysqld_safe --default ...
- 如何使用Putty登录安装在VirtualBox里的ubuntu
我是在Windows操作系统里用VirtualBox安装了ubuntu操作系统. 在VirtualBox里操作ubuntu的终端不是很方便,比如我想在Windows里复制一些命令到ubuntu的终端执 ...