请求与响应
Ⅰ请求
获取参数:
① GET请求:获取参数:request.args
、request.args.get('key')
②POST请求:获取参数:request.form
、request.form.get('key')
或者request.form[key]
③获取多个同样的key对应的value值时,使用getlist(key)
④获取请求路径:request.path
请求cookies:request.cookies
获取上传文件:request.files
Ⅱ响应
导包:from flask import make_response
使用:make_response('响应内容',响应状态码)
例如:return make_response(render_template(index.html),200)
和
return render_template(index.html)
显示效果是一样的,但是如果要返回一些response有关的参数的时候,需要设置一些参数列入cookies之类则需要用到make_response
res=make_response(render_template('index.html'))
res.set_cookie('token','1234',max_age=3000)
return res
cookie和session
Ⅰ.cookie
产生场景: 由于HTTP无状态协议, cookie的使用,保存一个令牌(标识符)用于标识用户的登录状态
令牌的产生: 在登录时向cookie中设置的。
设置令牌: res = make_response() res.set_cookie(key,value, max_age)
cookie不能跨浏览器
删除:res.delete_cookie(key)
Ⅱ.session
flask默认存储session的形式,将session数据保存在客户端
导包: from flask import session
使用: session[key]=value
使用flask-session库,将session数据保存在服务器端
pip install redis flask-session
app.config['SESSION_TYPE'] ='redis'
app.config['SESSION_REDIS'] = redis.Redis()
secret_key: 加密复杂程度
from flask_session import Session Session(app)
"""__author__ = song"""
import redis
from flask import Flask, make_response, render_template,request,session
from flask_script import Manager
from flask_session import Session
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world'
@app.route('/make_res/')
def make_res():
# 响应内容可以写页面源码
# return make_response('<h2>zzzzzzz</h2>')
index = render_template('index.html')
return make_response(index,200)
@app.route('/register/',methods=['GET','POST'])
def register():
if request.method == 'GET':
return render_template('register.html')
if request.method == 'POST':
# 模拟注册
# 1.获取页面中传递的参数
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
if username == 'sxc' and password == password2 and password=='123':
# 返回登陆页面
# 向cookie中设置参数
return render_template('login.html')
else:
return render_template('register.html')
@app.route('/login/',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
if username == 'sxc'and password == '123':
res = make_response(render_template('index.html'))
res.set_cookie('token','1234',max_age=3000)
return res
else:
return render_template('login.html')
@app.route('/logout/')
def logout():
# 注销
res = make_response(render_template('login.html'))
res.delete_cookie('token')
return res
@app.route('/index/')
def index():
# 登陆过后才能访问index.html,没有登陆跳转到登陆界面
token = request.cookies.get('token')
if token == '1234':
return render_template('index.html')
else:
return render_template('login.html')
@app.route('/session_login/',methods=['GET','POST'])
def session_login():
if request.method == 'GET':
return render_template('session_login.html')
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
if username == 'sxc' and password == '123':
session['login_status'] = 1
# session['name'] = 'sxc'
# session['pwd'] = '123'
return render_template('index.html')
else:
return render_template('session_login.html')
@app.route('/session_logout/')
def sesssion_my_logout():
# 注销
del session['login_status']
return render_template('session_login.html')
@app.route('/session_index/')
def session_index():
if 'login_status' in session:
return render_template('index.html')
else:
return render_template('session_login.html')
# 加密,加密复杂程度和设值有关
app.secret_key = '1234567890'
# 配置session信息
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1',port=6379)
Session(app)
manage = Manager(app)
if __name__ == '__main__':
manage.run()