我的第三十四篇博客---flask-cookie-sessionsqlchemary
Posted sll-csdn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的第三十四篇博客---flask-cookie-sessionsqlchemary相关的知识,希望对你有一定的参考价值。
cookie、session
获取cookie request.get.cookie(‘‘)
获取session session.get(‘‘)
cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)
复数形式Cookies
cookie是由服务器生成,发送给客户端浏览器,浏览器会将Cookie的Key/value保存,下次请求同一网站时就发送该cookie给服务器(前提是浏览器设置为启用cookie)
cookie的Key/value可以由服务器端自己定义
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用
Cookie基于域名安全,不同域名的Cookie是不能互相访问的
如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息
浏览器的同源策略
当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息
设置cookie
from flask import Flask,Response
@app.route(‘/cookie‘)
def set_cookie():
resp=Response("this is to set cookie")
resp.set_cookie(‘username‘,‘itcast‘)
return resp
设置过期时间
@app.route(‘/cookie‘)
def set_cookie():
response=Response(‘hello world‘)
response.set_cookie(‘username‘,‘itheima‘,3600) #单位是秒
return response
获取cookie
from flask import Flask,request
#获取cookie
@app.route(‘/request‘)
def resp_cookie():
resp=request.cookies.get(‘username‘)
return resp
Session
对于敏感重要的信息,建议储存在服务器端,在服务器端进行状态保持的方案就是session
session依赖于cookie
session数据的获取
session:请求上下文对象,用于处理http请求中的一些数据内容
@app.route(‘/index1‘)
def index1():
session[‘username‘]=‘itcast‘
return reddirect(url_for(‘index‘))
@app.route(‘/‘)
def index():
return session.get(‘username‘)
记得设置secretz-key=‘itcast‘ 这个里面的值自己可以随意设置
删除session
session.pop(‘‘)
app.config[‘PERMANENT_SESSION_LIFETIME‘]=20 #设置session的时效
连接mysql:
在Flask_SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理
会话用db.session表示,在准备把数据写入数据库前,要先将数据添加到会话中,然后调用commit()方法提交会话
在Flask-SQLAlchemy中、查询操作是通过query对象操作数据
最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据查询
db.session.add(role) 添加到数据库的session中
db.session.add_all([user1,user2]) 添加多个信息到session中
db.session.commit() 提交数据库的修改(包括增、删、改)
db.session.rollback() 数据库的回滚操作
db.session.delete(user) 删除数据库(需要跟上commit)
类型名 python中类型 说明
Integer int 普通整数,一般是32位
SmallInteger int 取值范围小的整数,一般是16位
BigInteger int或long 不限制精度的整数
Float float 浮点数
Numeric decimal.Decimal 普通整数,一般是32位
String str 变长字符串
Text str 变长字符串,对较长或不限长度的字符串做了优化
Unicode unicode 变长Unicode字符串
UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化
Boolean bool 布尔值
Date datetime.date 时间
Time datetime.datetime 日期和时间
LargeBinary str 二进制文件
常用的SQLAlchemy列选项
选项名 说明
primary_key 如果为True,代表表的主键
unique 如果为True,代表这列不允许出现重复的值
index 如果为True,为这列创建索引,提高查询效率
nullable 如果为True,允许有空值,如果为False,不允许有空值
default 为这列定义默认值
常用的SQLAlchemy
选项名 说明
backref 在关系的另一模型中添加反向引用
primary join 明确指定两个模型之间使用的联结条件
uselist 如果为False,不使用列表,而使用标量值
order_by 指定关系中记录排序方式
secondary 指定多对多中记录的排序方式
数据库连接设置
在Flask-SQLAlchemy中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URL键中
app.config[‘SQLALCHEMY_DATABASE_URL‘]=‘mysql://root:[email protected]:3306/数据库名‘
其他设置:
#动态追踪修改设置,如未设置只会提示警告
app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘]=True
#查询时会显示原始SQL语句
app.config[‘SQLALCHEMY_ECHO‘]=True
配置完成需要去MySQL中创建项目所使用的数据库
其他配置
名字 备注
SQLALCHEMY_DATABASE_URL 用于连接的数据库URL
常用的SQLAlchemy查询过滤器
过滤器 说明
filter() 把过滤器添加到原查询上,返回一个新查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit 使用指定的值限定原查询返回的结果
offset() 偏移原查询返回的结果,返回一个新查询
order_by() 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询
常用的SQLAlchemy查询执行器
方法 说明
all() 以列表的形式返回查询的所有结果
first() 返回查询的第一个结果,如果未查到,返回None
first_or_404() 返回查询的第一个结果,如果未查到,返回404
get() 返回指定主键对应的行,如不存在,返回None
get_or_404() 返回指定主键对应的行,如不存在,返回404
count() 返回查询结果的数量
paginate() 返回一个Paginate对象,它包含指定范围内的结果
例如:
有两个模型Role 和 User
查询Role模型里的所有数据: Role.query.all()
查询User模型里的主键id为3数据: User.query.get(3)
查询User模型里id为4的数据: User.query.filter(User.id==4).all()
查询User模型里id不为4的数据的第一条:User.query.filter(User.id!=4).first()
查询名字等于wang的所有人:
User.query.filter(User.name==‘wang‘).all()
first()返回查询到的第一个对象
User.query.first()
all()返回查询到的所有对象
User.query.all()
filter模糊查询,返回名字结尾字符为g的所有数据
User.query.fliter(User.name.endswith(‘g‘)).all()
get():参数为主键,如果主键不存在没有返回内容
User.query.get()
逻辑非,返回名字不等于wang的所有数据
User.query.filter(User.name!=‘wang‘).all()
not_相当于取反
from sqlalchemy import not_
User.query.fliter(not_(User.name==‘chen‘)).all()
逻辑与,需要导入and_,返回and()条件满足的所有数据
from sqlalchemy import and_
User.query.fliter(and_(User.name!=‘wang‘,User.email.endswith(‘163.com‘))).all()
逻辑或,需要导入or_
from sqlalchemy import or_
User.query.filter(or_(User.name!=‘wang‘,User.email.endswith(‘163.com‘))).all()
查询数据后删除
user=User.query.first()
db.session.delete(user)
db.session.commit()
User.query.all()
更新数据
user=User.query.first()
user.name=‘dong‘
db.session.commit()
User.query.first()
关联查询示例:
角色和用户的关系是一对多的关系,一个角色可以有多个用户,一个用户只能属于一个角色
查询角色的所有用户
l=User.query.filter(User.name==‘钱‘).first() #查询User模型里姓名为钱的数据
r=Role.query.filter(Role.id==l.role_id).first() #查询Role模型里id与l.role_id相等的数据
print(r.name) #输出r.name
以上是关于我的第三十四篇博客---flask-cookie-sessionsqlchemary的主要内容,如果未能解决你的问题,请参考以下文章
Android探索之旅(第三十四篇)ADF WIFI 难用?不存在的