Flask (二) cookie 与 session 模型
会话技术
Cookie
客户端端的会话技术
cookie本身由浏览器保存,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来
特点:
- 客户端会话技术,浏览器的会话技术
- 数据全都是存储在客户端中
- 存储使用的键值对结构进行的存储
- 特性
- 支持过期时间
- 默认会自动携带本网站的所有cookie
- 根据域名进行cookie存储
- 不能跨域名
- 不能跨浏览器
- Cookie是通过服务器创建的Response来创建的
设置cookie:
response.set_cookie(key,value[,max_age=None,exprise=None)]
max_age: 整数,指定cookie过期时间
expries: 整数,指定过期时间,可以指定一个具体日期时间
max_age和expries两个选一个指定
获取cookie:
request.cookie.get(key)
删除cookie
response.delete_cookie(key)
session
服务器端会话技术,依赖于cookie
特点:
- 服务端的会话技术
- 所有数据存储在服务器中
- 默认存储在内存中
- django是默认做了数据持久化(存在了数据库中)
- 存储结构也是key-value形势,键值对
- session 是离不开cookie的
常用操作:
设置session
session[‘key’] = ‘value’
获取session
session.get(key,default=None) 根据键获取会话的值
删除session
pop(key) 删除某一值
clear() 清除所有
模板Template
模板是呈现给用户的界面
在MVT中充当T的角色,实现了VT的解耦,开发中VT有这N:M的关系,一个V可以调用任意T,一个T可以被任意V调用
模板处理分为两个过程
1. 加载
2. 渲染
模板代码包含两个部分
1. 静态HTML
2. 动态插入的代码段
Jinja2
Flask中使用Jinja2模板引擎
Jinja2由Flask作者开发
一个现代化设计和友好的Python模板语言
模仿Django的模板引擎
优点
速度快,被广泛使用
HTML设计和后端Python分离
减少Python复杂度
非常灵活,快速和安全
提供了控制,继承等高级功能
模板语法
模板语法主要分为两种
变量
标签
模板中的变量 {{ var }}
视图传递给模板的数据
前面定义出来的数据
变量不存在,默认忽略
模板中的标签 {% tag %}
控制逻辑
使用外部表达式
创建变量
宏定义
结构标签
block 块操作
父模板挖坑,子模板填坑
{% block xxx %}
{% endblock %}
extends 继承
{% extends ‘xxx’ %}
继承后保留块中的内容
{{ super() }}
include
包含,将其他html包含进来,体现的是由零到一的概念
{% include ’xxx’ %}
marco
宏定义,可以在模板中定义函数,在其它地方调用
{% marco hello(name) %}
{{ name }}
{% endmarco %}
宏定义可导入
{% from ‘xxx’ import xxx %}
循环
for
{% for item in cols %}
AA
{% else %}
BB
{% endfor %}
可以使用和Python一样的for…else
也可以获取循环信息 loop
loop.first
loop.last
loop.index
loop.index0
loop.revindex
loop.revindex0
过滤器
语法
{{ 变量|过滤器|过滤器… }}
capitalize
lower
upper
title
trim
reverse
striptags 渲染之前,将值中标签去掉
safe
default(1)
last
first
length
sum
sort
...
模型Model
Flask模型
Flask默认并没有提供任何数据库操作的API
我们可以选择任何适合自己项目的数据库来使用
Flask中可以自己的选择数据,用原生语句实现功能,也可以选择ORM(SQLAlchemy,MongoEngine)
原生SQL缺点
代码利用率低,条件复杂代码语句越长,有很多相似语句
一些SQL是在业务逻辑中拼出来的,修改需要了解业务逻辑
直接写SQL容易忽视SQL问题
ORM
将对对象的操作转换为原生SQL
优点
易用性,可以有效减少重复SQL
性能损耗少
设计灵活,可以轻松实现复杂查询
移植性好
python的ORM(SQLAlchemy)
针对于Flask的支持
pip install flask-sqlalchemy
数据库连接
dialect+driver://username:password@host:port/database
dialect: 数据库实现
driver: 数据库的驱动
username: 用户名
password: 密码
host: 主机
port: 端口
database: 数据库
连接SQLite
连接数据库需要指定配置
app.config[‘SQLALCHEMY_DATABASE_URI’] = DB_URI
app.config[‘SQLALCHEMY_TRAKE_MODIFICATIONS’]=False
禁止对象追踪修改
SQLite数据库连接不需要额外驱动,也不需要用户名和密码
SQLite连接的URI
DB_URI = sqlite:///sqlite3.db
db = SQLAlchemy()
db.init_app(app)
连接MySQL
USERNAME=‘root’
PASSWORD=‘root’
HOSTNAME = ’localhost’
PORT=‘3306’
DATABASE=‘HelloFlask’
DB_URI=‘mysql+pymsql://{}:{}@{}:{}/{}’.format(
USERNAME,
PASSWORD,
HOSTNAME,
PORT,
DATABASE)
创建模型
class Person(db.Model):
__tablename__=‘person’
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(16),unique=True)
字段类型
Integer
Float
String
常用约束
primary_key
autoincrement
unique
default
数据操作
创建数据库
db.create_all()
删除数据库
db.drop_all()
在事务中处理,数据插入
db.session.add(object)
db.session.commit()
获取所有数据
Person.query.all()
Flask (二) cookie 与 session 模型的更多相关文章
- flask中cookie和session介绍
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...
- flask中cookie和session设置
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...
- Flask:cookie 和 session (0.1)
Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2 Cookie是什么?有什么用? 某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常 ...
- Flask中cookie和session设置与csrf原理攻防
Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...
- python三大框架之一flask中cookie和session的相关操作
状态保持 Cookie cookie 是指某些网站为了 辨别 用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...
- flask框架--cookie,session
今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...
- 【Python】Flask系列-cookie和session笔记
cookie: 1.cookie出现的原因:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- flask的cookie和session的简单原理
在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...
- Django:Admin,Cookie,Session
一. Admin的配置 1.Admin基础设置 admin是django强大功能之一,它能够从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经 ...
随机推荐
- 10.19-10.20 test
2016 10.19-10.20 两天 题目by mzx Day1: T1:loverfinding 题解:hash #include<iostream> #include<cst ...
- SDUT OJ 进制转换
进制转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入一个十进制数N,将它转换成R进制数输出. 输入 输入数据包含多个测试实例,每个测试实例包含两个整 ...
- Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量
转自:http://yanyiwu.com/work/2015/01/04/Haystack.html 一篇14页的论文Facebook-Haystack, 看完之后我的印象里就四句话: 因为[传统文 ...
- LA-5059(组合游戏)
题意: 有n堆石子,分别有a1,a2,...,an个,两个游戏者轮流操作,每次可以选一堆m拿走至少一个且不超过一半的石子,谁不能拿石子就算输; 思路: a1太大打印sg表找规律,然后就是异或和了; A ...
- hdu-5726 GCD(rmq)
题目链接: GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- [BZOJ 1475] 方格取数
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1475 [算法] 首先将方格黑白染色 , 也就是说 , 如果(i + j)为奇数 , ...
- eclipse 切换数据库
PS:jdbc.url = 后面的路径就是连接的数据库,如果需要连接开发库(dev_cfin),则只需要将tg_cfin 换成 dev_cfin,重启后台即可.
- [转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
#include "stdafx.h" class A { public: A(){ax = ;}; A(int a){ax = a;}; int ax; }; class B { ...
- mongodb和mysql语法对比
MySQL: SELECT * FROM user Mongo: db.user.find() —————————————— MySQl: SELECT * FROM user WHERE name ...
- 3.2-3.3 Hive中常见的数据压缩
一.数据压缩 1. 数据压缩 数据量小 *本地磁盘,IO *减少网络IO Hadoop作业通常是IO绑定的; 压缩减少了跨网络传输的数据的大小; 通过简单地启用压缩,可以提高总体作业性能; 要压缩的数 ...