Response响应对象

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

  1. 如果返回的是一个合法的响应对象,它会从视图直接返回。
  2. 如果返回的是一个字符串,响应对象会用字符串数据和默认参数创建。
  3. 如果返回的是一个元组,且元组中的元素可以提供额外的信息。这样的元组必须是(response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
  4. 如果上述条件均不满足, Flask 会假设返回值是一个合法的 WSGI 应用程序,并转换为一个请求对象。

以上从引用官网的一段话,其实简单来说就是所有的响应都会生成一个合法的响应对象,我们平常用的最多的就是直接返回字符串或是返回一个template。最终都会被flask处理成response对象。

Cookies对象:

 

Cookies用于在客户端存储一些信息, 当flask应用响应用户请求时可以设置cookies的值,当用户请求flask应用时可以获取cookies的值。

简单来说,设置cookies的方式为:

responseObj.set_cookies(“xxx”)  ,此处的responseObj是一个response的实例,xxx是cookies的名称

获取cookies的方式为

request.cookies.get(“xxx”),此处的request是全局request对象,xxx是cookies的名称

下面通过一个例子来说明cookies的使用

  1. 创建一个设置cookies的方法:
@app.route("/setCookies")
def setCookies():
    res = make_response("this page will set a cookies")
    res.set_cookie("myCookies","my first cookies")
    return res

注:需要import make_response方法

  2. 创建一个获取cookies的方法

@app.route("/getCookies")
def getCookies():
    myCookies = request.cookies.get("myCookies")
    return myCookies

  3. 测试应用

访问 /setCookies 方法

访问/getCookies方法

Session对象:

 

它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名。这意味着用户可以查看你 Cookie 的内容,但却不能修改它,除非用户知道签名的密钥。

Session可以通过session[‘xxx’]=’yyy’进行设置,其中xxx是key值,yyy是session的value。

通过session.pop(‘xxx’,none)把key是xxx的session移除

一般用session进行用户是否登录的验证

下面举例来说明:

  1. 设置session

使用下面的代码

@app.route("/setSession")
def setSession():
    session["userName"] = "my session"
   
return session["userName"]

使用session时要先设置app_secret不然会报错:

RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.

在调用此代码之前加上secret_key的设置

app.secret_key = "1234"

安全起见,secret_key要设置的复杂一些,这里演示用就简单设置了。

  2. 验证session

代码如下:

@app.route("/checkSession")
def checkSession():
    if "userName" in session:
        return "userName exist"
   
else:
        return "userName lost"

  3. 移除session

代码如下:

@app.route("/removeSession")
def removeSession():
    session.pop("userName",None)
    return "remove session!"
  1. 验证

访问/setSession

验证session 访问/checkSession

证明session存在

下一步,移除session

然后我们再次验证session。

Session已丢失

python web开发-flask中response,cookies,session对象使用详解的更多相关文章

  1. python web开发-flask中日志的使用

    Flask使用日志记录的方式: 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用l ...

  2. python web开发-flask中sqlalchemy的使用

    SqlAlchemy是一个python的ORM框架. 在flask中有一个flask-sqlalchemy的扩展,使用起来很方便. 1.       创建一个sqlalchemy的Model模块 创建 ...

  3. python web开发-flask中消息闪现flash的应用

    Flash中的消息闪现,在官方的解释是用来给用户做出反馈.不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理,也就是说flask只存在于两个相邻 ...

  4. python web开发-flask中的url带斜线和不带斜线区别详解

    通过flask进行路由配置的时候,有一个细节,就是同样的url,带上"/"和不带"/"有什么区别. 举例说明: 比如有个url,名字为"/url&qu ...

  5. hibernate的事务管理和session对象的详解

    //开启事务 transaction=session.beginTransaction(); 上面为开启事务 transaction.commit();这个为提交事务 从session对象中获取事务后 ...

  6. python web开发-flask访问请求数据request

    Request对象在web应用的开发中是一个非常重要的对象,主要用来获取用户发来的请求数据. 常用属性参考:http://docs.jinkan.org/docs/flask/api.html#fla ...

  7. python web开发-flask连接sqlite数据库

    在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1.       数据准备 先在sqlite3中创建一 ...

  8. python web开发-flask读取txt文件内容

    某些情况下,需要读取flask网站要目录下的txt文件.但是直接在flask网站的目录下创建一个文件是无法访问的.从网站找了一些资料,最终发现通过写一个方法返回txt内容比较简单方便,不过此方法适用于 ...

  9. python web开发flask框架 安装与环境

    # encoding:utf-8 # 从flask这个框架中导入Flask这个类 from flask import Flask # 初始化一个Flask对象 # Flasks() # 需要传递一个参 ...

随机推荐

  1. HDU - 4496 City 逆向并查集

    思路:逆向并查集,逆向加入每一条边即可.在获取联通块数量的时候,直接判断新加入的边是否合并了两个集合,如果合并了说明联通块会减少一个,否则不变. AC代码 #include <cstdio> ...

  2. Codeforces103D - Time to Raid Cowavans

    Portal Description 给出长度为\(n(n\leq3\times10^5)\)的序列\(\{a_n\}\),进行\(q(q\leq3\times10^5)\)次询问:给出\(x,y\) ...

  3. Java中子类能继承父类的私有属性吗?

    前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先 ...

  4. 【Elasticsearch全文搜索引擎实战】之集群搭建及配置

    文中Elasticsearch版本为6.0.1 1. 环境配置 把环境配置放在第一节来讲,是因为很多人按官网的Getting Started安装运行会有各种错误.其实都是因为一些配置不正确引起的. 首 ...

  5. 使用lambda编程之延迟执行

    使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点. 所有的lambda表达式都是延迟执行的.毕竟,如果你希望立即执行一段代码,那就没有必要使用lambda表达式了.延迟执行代码的 ...

  6. Mybatis的基本使用

    .什么是Mybatis? Mybatis:根据官方解释,MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及 ...

  7. python 下划线--完美解释

    Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...

  8. flask中jinjia2模板引擎详解3

    接上文 模板继承 Jinji2中的模板继承是jinjia2比较强大的功能之一. 模板继承可以定义一个父级公共的模板,把同一类的模板框架定义出来共享. 这样做一方面可以提取共享代码,减少代码冗余和重复的 ...

  9. Android开发之组件

    Android应用程序由组件组成,组件是可以解决被调用的基本功能模块.Android系统利用组件实现程序内部或程序间的模块调用,以解决代码复用问题,这是Android系统非常重要的特性.在程序设计时, ...

  10. Tomcat启动过程源码解读

    根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动 ...