会话技术

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 模型的更多相关文章

  1. flask中cookie和session介绍

    flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...

  2. flask中cookie和session设置

    flask中cookie和session介绍   一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...

  3. Flask:cookie 和 session (0.1)

    Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2 Cookie是什么?有什么用? 某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常 ...

  4. Flask中cookie和session设置与csrf原理攻防

    Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...

  5. python三大框架之一flask中cookie和session的相关操作

    状态保持 Cookie cookie 是指某些网站为了 辨别  用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...

  6. flask框架--cookie,session

    今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...

  7. 【Python】Flask系列-cookie和session笔记

    cookie: 1.cookie出现的原因:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...

  8. flask的cookie和session的简单原理

    在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...

  9. Django:Admin,Cookie,Session

    一. Admin的配置 1.Admin基础设置 admin是django强大功能之一,它能够从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经 ...

随机推荐

  1. Python对象拷贝——深拷贝与浅拷贝

    对象赋值 浅拷贝 深拷贝 1. 对象赋值 对象的赋值实际上是对对象的引用.也就是说当把一个对象赋值给另一个对象时,只是拷贝了引用.如: >>> t1 = tuple('furzoom ...

  2. UVA10561 Treblecross —— SG博弈

    题目链接:https://vjudge.net/problem/UVA-10561 题意: 两个人玩游戏,轮流操作:每次往里面添加一个X,第一个得到XXX的获胜. 题解: 详情请看<训练指南&g ...

  3. html5--5-6 绘制圆/弧

    html5--5-6 绘制圆/弧 学习要点 掌握arc() 方法创建圆弧/曲线(用于创建圆或部分圆) 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y ...

  4. Yii的缓存机制之片段缓存

      一.首先在main.php配置缓存组件 在components里面添加cache项.代码如下: // application components 'components'=>array( ...

  5. Function javascript

    通常而言,一个函数是一个子程序,他们可以被外部代码调用(亦或被滴管函数在内部调用).和程序一样,函数是由一系列声明(被称为函数体function body)组合而成.值可以传递给函数,并且函数可以返回 ...

  6. MongoDB 项目集成 mongo-driver 3.4.2

    第一次写技术!大白话讲讲.拿着用就可以了 本人是,NET的技术人员,会点JAVA所以很多不专业,见谅哈 刚刚开始使用mongo 整整搞了两天我才搞个半桶水,还是将就着用吧 随便把mongo在win的搭 ...

  7. 更换ubuntu apt-get源

    原文地址:http://www.cnblogs.com/zhangpengshou/p/3591387.html 为了优化ubuntu软件安装/更新速度,我测试了国内几家apt源的速度,发现北京交大的 ...

  8. C++之全局函数和成员函数互相转换

    解析:成员函数会用this指针自动隐藏第一个操作数(左操作数) 1.把全局函数转化成成员函数,通过this指针隐藏左操作数. Test add(Test &t1,Test &t2)  ...

  9. Windows Vista for Developers——第四部分:用户帐号控制(User Account Control,UAC)

    作者:Kenny Kerr 翻译:Dflying Chen 原文:http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-f ...

  10. Python复习 基础知识

     动态语言:变量类型不固定称之为动态语言 什么是动态语言呢? 可以简单的理解为直接被解释执行的语言称为动态语言. 而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言. 当前静态语言有:jav ...