cookie:
什么是cookie?
是一种数据存储技术
将一段文本保存在客户端的一种技术 并且可以长时间保存
cookie的使用场合:
记住密码
搜索关键词
在Flask使用cookie
使用 响应对象 来保存cookie到客户端
响应对象:
resp = make_response("响应字符串")
resp = redirect("地址")
响应对象.set_cookie(key, value, max_age)
key:
保存cookie的名称
value:
保存cookie的值
max_age:
保存时间以 s 单位
session
什么是session
session是保存在服务器为每个浏览器所开辟的一段空
session 在Flask中的实现
配置SECRET_KEY
app.fonfig["SECRET_KEY"] = "YOURGUESS"
使用session:
from flask inport session
1.向session中保存数据
session["key"] = vlaue
2.从session中获取数据
value = session["key"]
3.从session中删除数据
del session["key"]
session 与 cookie
都可以保存数据
保存数据不同
session保存在服务器上
cookie是保存在浏览器上的
保存时间不同
session临时会话保存数据
cookie可以自定义保存时间
安全性问题
session 安全级别较高
cookie 安全级别较低
from flask import Flask, make_response, request, render_template, session, redirect
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@localhost:3306/flask"
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SECRET_KEY'] = 'INPUT A STRING'
db=SQLAlchemy(app)
import pymysql
pymysql.install_as_MySQLdb()
class Users(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer,primary_key=True)
uname = db.Column(db.String(50),nullable=False)
upwd = db.Column(db.String(50),nullable=False)
realname = db.Column(db.String(30),nullable=False)
def __repr__(self):
return "<Users %r>" % self.uname
# db.drop_all()
db.create_all()
@app.route('/set_cookie')
def set_cookie():
# 将响应内容构建成响应对象
resp = make_response("Set Cookie Success")
# 保存数据进cookie
resp.set_cookie('username','sf.zh')
# 保存数据进cookie并设置max_age
resp.set_cookie('keywords','Cannon',max_age=60*60*24*365)
return resp
@app.route('/get_cookie')
def get_cookie():
# username = request.cookies['username']
keywords = request.cookies['keywords']
print('keywords:%s' % (keywords))
return "get cookie ok"
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
# 判断之前是否有成功登录过(id和uname是否存在于cookie上)
if 'id' in request.cookies and 'uname' in request.cookies:
return '您已成功登录'
else:
# 去往 login.html 模板上
return render_template('login.html')
else:
# 1.接收用户名和密码
uname = request.form['uname']
upwd = request.form['upwd']
# 2.验证用户名和密码是否正确(数据库查询)
user = Users.query.filter_by(uname=uname,upwd=upwd).first()
# 3.如果正确的话,判断是否记住密码
if user:
resp = make_response('登录成功')
print(type(user.id))
# 登录成功
if 'isSaved' in request.form:
# 将 id 和 uname 保存进cookie
m_age = 60*60*24*365
resp.set_cookie('id',str(user.id),max_age=m_age)
resp.set_cookie('uname',uname,max_age=m_age)
return resp
else:
# 4.如果不正确的话,则给出提示
return "登录失败"
pass
@app.route('/setSession')
def setSession():
session['username'] = 'sanfeng.zhang'
return "Set session Success"
@app.route('/getSession')
def getSession():
username = session['username']
return 'session值为:'+username
@app.route('/delSession')
def delSession():
del session['username']
return "Delete Session Success"
@app.route('/sign_in',methods=['GET','POST'])
def sign_in():
if request.method == 'GET':
return render_template('sign_in.html')
else:
uname = request.form['uname']
upwd = request.form['upwd']
user = Users.query.filter_by(uname=uname,upwd=upwd).first()
if user:
# 登录成功,将信息保存进 session
session['id'] = user.id
session['uname'] = user.uname
return redirect('/index')
else:
# 登录失败,回到sign_in.html
return render_template('sign_in.html')
@app.route('/index')
def index():
# 判断用户是否登录成功
if 'id' in session and 'uname' in session:
uname = session['uname']
return render_template('index.html',params=locals())
@app.route('/sign_out')
def sign_out():
if 'id' in session and 'uname' in session:
del session['id']
del session['uname']
return redirect('/index')
@app.route('/create_xhr')
def create_xhr():
return render_template('xhr.html')
if __name__ == '__main__':
app.run(debug=True)