【Flask】 python学习第一章 - 4.0 钩子函数和装饰器路由实现 session-cookie 请求上下文

钩子函数和装饰器路由实现

before_request 每次请求都会触发

before_first_requrest  第一次请求前触发

after_request  请求后触发 并返回参数

teardown_request  失败后触发 并返回异常 需要传入参数接收

from flask import Flask, request

# 设置对象
app = Flask(__name__,
static_url_path='/python27',
static_folder='static',
template_folder='templates') # 第一次请求之前都会调用 例如mysql连接
@app.before_first_request
def before_first_request():
print("before_first_request") # 每次请求都会被调用
@app.before_request
def before_request():
print("before_request")
# request.remote_addr 用户访问IP地址
# 判断如果访问地址在黑名单内 就return 黑名单
if request.remote_addr == "127.0.0.1":
return "黑名单" # 请求之后会调用 并且在函数里面接收一个参数 响应
@app.after_request
def after_request(response):
print("after_request")
# 对响应数据进行统一处理 response返回数据为return数据
return response # 请求失败之后会调用函数 并且将异常传入参数
@app.teardown_request
def teardown_request(error):
print("teardown_request")
return error @app.route('/')
def index():
return "hello wowlrd" if __name__ == '__main__':
app.run(host='127.0.0.1', port=8888, debug=True)

钩子函数

werkzeug工具集 

Request response routing模块 other

routing模块: Rule Map BaseConverters MapAdapter

Request  常用属性 

data  form args cookies headers methods url files

app.route("/data", methods=['POST'])

def data():

  data = request.data

  print(data)

  return "ok"

from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def index():
return "index" @app.route('/data', methods=['POST'])
def data():
data = request.data
print(data)
return 'ok' @app.route("/upload", methods=['POST'])
def upload():
file = request.files.get("pic")
file.save("aaa.jpg")
return "success" if __name__ == '__main__':
app.run(debug=True)

data

状态保持

无状态:http 无状态协议 每次请求独立, 协议对事务没有记忆能力,  同一个url请求 没有上下文关系

解决无状态协议问题

客户端 cookie                   服务器端 session

cookie 不同网站之间cookie不能共享 同源策略 、设置获取cookie 浏览器会自动保存cookie  、

【Flask】 python学习第一章 - 4.0 钩子函数和装饰器路由实现 session-cookie 请求上下文

request.cookie.get("passwd")  #获取cookie值  

response =  make_response("success")  # 设置对象  

respnse.set_cookie("passwd","qwe", max_age = 3600)   #设置cookie值  # 设置过期时间  max_age最大连接时间3600秒 

response.delete_cookie("passwd") 删除cookie 登出
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route("/")
def index():
username = request.cookies.get('username')
passwd = request.cookies.get('userpass')
return "%s ----- %s" % (username, passwd) @app.route("/login")
def login():
response = make_response("success")
response.set_cookie("username", "laowang")
response.set_cookie("userpass", "")
return response if __name__ == '__main__':
app.run(debug=True)

获取cookie 和 设置cookie

服务器端 session   存放敏感信  session依赖cookie

session需要设置  app.config["SECRET_KEY"] = "AWDWDAIJIAJCWJAI"

session可以放在url中

# 设置session
app.config["SECRET_KEY"] = "qwniassnidiajs"
session["user_name"] = "laowang"
session["user_id"] = "" # 获取session 如果没有 返回值为空
user_id = session.get("user_id", '')
user_name = session.get("user_name", '') # 删除session 如果已经删除 返回值为none
session.pop("user_id", None)
session.pop("user_name", None)
from flask import Flask, request, session

app = Flask(__name__)
# session 加密 使用 必须大写
app.config['SECRET_KEY'] = "adwdawdaanvoirjaowe" # 获取 session
@app.route("/")
def index():
# session 依赖 cookie
user_id = session.get("user_id", '')
user_name = session.get("user_name", '')
# 返回到页面
return "%s + %s" % (user_id, user_name) # 登陆 传输session
@app.route('/login')
def login():
session['user_id'] = ""
session["user_name"] = "laowang"
return "session" # 登出 删除session
@app.route("/logout")
def logout():
session.pop("user_id" , None)
session.pop("user_name", None)
return "success" if __name__ == '__main__':
app.run(debug=True)

设置session 登陆登出

请求上下文  request context     请求发生时 可以使用

应用上下文 application context  应运启动时 可以使用 

app = Flask(__name__) ------> 相等于current_app
app.route('/')
def login():
print(request.method)
print(current_app.config.get("DEBUG"))

未完待续

上一篇:Poj3683:Priest John's Busiest Day


下一篇:JDK、JRE、JVM三者间的联系与区别