博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask (二) cookie 与 session 模型
阅读量:4971 次
发布时间:2019-06-12

本文共 3349 字,大约阅读时间需要 11 分钟。

会话技术

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()
 
 

 

转载于:https://www.cnblogs.com/gugubeng/p/9722709.html

你可能感兴趣的文章
[CTSC2012]熟悉的文章 后缀自动机
查看>>
纯手工打造[博客园-博文数据分析]及技术分享(java)
查看>>
POJ 1961 KMP
查看>>
移动web资源整理
查看>>
ODBC, OLEDB, ADO, ADO.Net的演化简史
查看>>
如何实现div的高度100%填充
查看>>
计算机的分类
查看>>
探索c#之一致性Hash详解
查看>>
android 到底是什么决定了app的名称 application label activity label
查看>>
40026118素数的个数
查看>>
$.parseJSON失效的问题
查看>>
Linux 基础命令
查看>>
Vue的自定义组件之间的数据传递
查看>>
laravel5.2总结--请求
查看>>
web上传文件——python
查看>>
Vue : Expected the Promise rejection reason to be an Error
查看>>
使用单体模式设计原生js插件
查看>>
Java IO 用递归实现目录删除和树形目录展示 Java实现
查看>>
iOS 绘图
查看>>
CnBlogs博文demo演示技巧比较:jsfiddle完胜
查看>>