码迷,mamicode.com
首页 > 其他好文 > 详细

Flask05 cookie

时间:2017-09-17 15:48:56      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:2-2   ...   turn   als   子域名   mil   ast   pycharm   字符   

 

1 什么是cookie

  就是网站存放到你浏览器中的一部分固定内容;当你下次访问我这个网站的时候,你会把之前我存放到你浏览器中的数据带回来给我
        你要先登录(用户名、密码) ->    我作为后台,会将能够唯一识别你的信息数据存在你的浏览器中    ->    下次你再访问我的时候,你的浏览器就会自动将这些数据返回给我    ->    如果我发现你已经登录过来,我就会让你免去登录步骤
  例子(自动登录):
    你是我的网站用户,你登录完我的网站(如果你选择了记住密码和自动登录);如果我在后台获取到你的相关信息后再到数据库查询对应数据,如果正确就会将这些登录信息存放到你的浏览器中,当你下次访问我的网站是就会自动进行登录

   注意:
          浏览器只能删除cookie,不能进行修改;
          只要你存放着我网站的cookie,那么,下次你访问我的时候就一定会把这个cookie信息传给我

 

2 如何查看cookie信息

  谷歌浏览器  ->  设置  ->  高级  ->  内容设置  ->  cookie

 

3 如何设置cookie

  cookie是服务器通过响应设置的,所以需要用到Response对象,后台向前端返回的是一个Response对象

  3.1 构造出Response对象

    resp = make_response(设置cookie成功‘)

      注意:make_response方法返回的是一个Response对象

  3.2 利用Response对象的set_cookie方法来设置cookie信息

    resp.set_cookie(‘name‘, ‘Warrior‘)

      注意:通过make_response方法得到的Response对象在pycharm编辑器中不会自动进行代码补全,所以点击后也看不到源代码;但是我们可以通过Response这个类来查看set_cookie方法的源代码

        Response.set_cookie()  点击set_cookie后就可以查看源代码啦(前提:需要导入Response这个类)

  3.3 视图函数返回Response对象即可

    return resp  

技术分享
from flask import Flask
from flask import make_response, Response

app = Flask(__name__)

@app.route(/)
def index():
    # Response.set_cookie()  # 用于查看源代码
    # def set_cookie(self, key, value=‘‘, max_age=None, expires=None,
    #                path=‘/‘, domain=None, secure=False, httponly=False):
    resp = make_response(设置cookie成功) # 创建Response对象
    resp.set_cookie(name, Warrior) # 通过Response对象设置cookie
    return resp # 返回Response对象

print(app.url_map)

if __name__ == __main__:
    app.run(debug=True)
View Code

  3.4 设置后的效果

    技术分享

 

  3.5 注意

    每次设置完cookie后,在查询效果前需要刷新一下

    cookie数据必须是字符串类型否则会报错

4 如何拿到cookie数据

  通过请求对象去获取cookie数据

  4.1 导入request对象

    from flask import request

  4.2 访问reques对象的cookies属性

    request.cookies

  4.3 查看request对象的cookies属性的类型

    print(type(request.cookies))

      打印出的结果为:<class ‘werkzeug.datastructures.ImmutableTypeConversionDict‘>

        显而易见,这是一个class类,查看这个类的方法如下

          根据打印出的类型信息,导入相关信息

            from werkzeug.datastructures import ImmutableTypeConversionDict

              点击ImmutableTypeConversionDict后就可以看到源码啦,从源码中可以知道这个ImmutableTypeConversionDict类是继承与Dict类的,所以Dict类拥有的方法和属性ImmutableTypeConversionDict类都可以使用

  4.4 打印request对象的cookie属性信息

    print(request.cookies)

      打印结果为:{‘name‘: ‘Warrior‘, ‘age‘: ‘24‘}    这个结果是一个字典,原因已经在4.3阐明清楚啦

  4.5 如何获取指定的那个cookie信息

    name = request.cookies.get(‘name‘)

技术分享
from flask import Flask
from flask import make_response, Response
from flask import request

from werkzeug.datastructures import ImmutableTypeConversionDict

app = Flask(__name__)

# 利用Response对象设置cookie
@app.route(/)
def index():
    # Response.set_cookie()  # 用于查看源代码
    # def set_cookie(self, key, value=‘‘, max_age=None, expires=None,
    #                path=‘/‘, domain=None, secure=False, httponly=False):
    resp = make_response(设置cookie成功) # 创建Response对象
    resp.set_cookie(name, Warrior) # 通过Response对象设置cookie
    resp.set_cookie(age, 24)
    return resp  # 返回Response对象

# 利用Request对象获取cookie数据
@app.route(/get/)
def get():
    print(request.cookies) # 打印所有的cookie数据
    print(type(request.cookies)) # 打印resqust对象cookie属性的类型
    name = request.cookies.get(name) # 获取单个的cookie数据
    return 获取到的名字为:+name

print(app.url_map)

if __name__ == __main__:
    app.run(debug=True)
View Code

 

5 设置cookie的保持时间

  cookie默认的保持时间是永久有效(即:关闭浏览器客户端之前都是有效的),时间单位是秒

  技术分享

  resp.set_cookie(‘age‘, ‘24‘)

    技术分享

   resp.set_cookie(‘name‘, ‘Warrior‘, max_age=60)

    技术分享

from flask import Flask
from flask import make_response, Response
from flask import request

from werkzeug.datastructures import ImmutableTypeConversionDict

app = Flask(__name__)

# 利用Response对象设置cookie
@app.route(/)
def index():
    # Response.set_cookie()  # 用于查看源代码
    # def set_cookie(self, key, value=‘‘, max_age=None, expires=None,
    #                path=‘/‘, domain=None, secure=False, httponly=False):
    resp = make_response(设置cookie成功)
    resp.set_cookie(name, Warrior, max_age=60)
    resp.set_cookie(age, 24)
    return resp  # 返回Response对象

# 利用Request对象获取cookie数据
@app.route(/get/)
def get():
    print(request.cookies) # 打印所有的cookie数据
    print(type(request.cookies))
    name = request.cookies.get(name)
    age = request.cookies.get(age)
    return 获取到的名字为:age =  + name + "     " + "获取到的年纪为:age = " + age

print(app.url_map)

if __name__ == __main__:
    app.run(debug=True)

 

6 设置访问路径

  cookie默认的访问路径是所有路径

  技术分享

  resp.set_cookie(‘name‘, ‘Warrior‘, path=‘/test/‘)

    该cookie只有路径开头是 /test/ 的才能够访问到

    技术分享

  resp.set_cookie(‘age‘, ‘24‘)

    该cookie所有的路径都能够访问到

    技术分享

 

7 设置访问域名

  不进行设置时,那么只有设置cookie那个域名下可以访问到cookie信息;一般情况下是不需要进行设置的,如果需要利用子域名进行访问时就必须进行设置

  resp.set_cookie(‘name‘, ‘Warrior‘, domain=‘.xiangxu.com‘)

    将该cookie设置成 xiangxu.com 及其子域名下都可以进行访问

  技术分享

技术分享
from flask import Flask
from flask import make_response, Response
from flask import request
from flask import Blueprint

from werkzeug.datastructures import ImmutableTypeConversionDict

app = Flask(__name__)
app.config[SERVER_NAME] = xiangxu.com:5000 # 设置域名访问

bp = Blueprint(moive, __name__, subdomain=zeus)

# 利用子域名访问cookie
@bp.route(/get/)
def action():
    print(request.cookies)  # 打印所有的cookie数据
    print(type(request.cookies))
    name = request.cookies.get(name)
    age = request.cookies.get(age)
    return 获取到的名字为:age =  + str(name) + "     " + "获取到的年纪为:age = " + str(age)
app.register_blueprint(bp)


# 利用Response对象设置cookie
@app.route(/)
def index():
    # Response.set_cookie()  # 用于查看源代码
    # def set_cookie(self, key, value=‘‘, max_age=None, expires=None,
    #                path=‘/‘, domain=None, secure=False, httponly=False):
    resp = make_response(设置cookie成功)
    resp.set_cookie(name, Warrior, domain=.xiangxu.com)
    resp.set_cookie(age, 24)
    return resp  # 返回Response对象

# 利用Request对象获取cookie数据
@app.route(/get/)
def get():
    print(request.cookies) # 打印所有的cookie数据
    print(type(request.cookies))
    name = request.cookies.get(name)
    age = request.cookies.get(age)
    return 获取到的名字为:age =  + str(name) + "     " + "获取到的年纪为:age = " + str(age)

# 利用不同路径访问cookie
@app.route(/test/get/, endpoint=testGet)
def get():
    print(request.cookies) # 打印所有的cookie数据
    print(type(request.cookies))
    name = request.cookies.get(name)
    age = request.cookies.get(age)
    return 获取到的名字为:age =  + name + "     " + "获取到的年纪为:age = " + age



print(app.url_map)

if __name__ == __main__:
    app.run(debug=True)
View Code

 

8 设置是否JS代码可以访问cookie

  默认情况下可以通过JS代码访问cookie信息

  resp.set_cookie(‘name‘, ‘Warrior‘, httponly=True)

  技术分享

  

9 未完待续...

  2017年9月17日15:30:40

 

Flask05 cookie

标签:2-2   ...   turn   als   子域名   mil   ast   pycharm   字符   

原文地址:http://www.cnblogs.com/NeverCtrl-C/p/7535751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!