一、请求响应
from flask import Flask,make_response,jsonify from flask import request from flask import render_template from flask import redirect from flask import make_response app = Flask(__name__) from werkzeug.datastructures import CombinedMultiDict app.debug=True @app.route('/login.html', methods=['GET', "POST"]) def login(): # print(type(request.values['name'])) # post和get提交的数据总和 还是个字典 # print(request.full_path) # 全路径 # print(request.url) # 带数据 # print(request.base_url) # 带域名 # print(request.files) # 等同于django中的request.FILES # 请求相关信息 # request.method 提交的方法 # request.args get请求提及的数据 # request.form post请求提交的数据 # request.values post和get提交的数据总和 # request.cookies 客户端所带的cookie # request.headers 请求头 # request.path 不带域名,请求路径 # request.full_path 不带域名,带参数的请求路径 # request.script_root # request.url 带域名带参数的请求路径 # request.base_url 带域名请求路径 # request.url_root 域名 # request.host_url 域名 # request.host 127.0.0.1:500 # request.files # obj = request.files['the_file_name'] # obj.save('/var/www/uploads/' + secure_filename(f.filename)) # 响应相关信息 # return "字符串" # return render_template('html模板路径',**{}) # return redirect('/index.html') # return jsonify({'k1':'v1'}) # response = make_response(render_template('index.html')) # response是flask.wrappers.Response类型 # response.delete_cookie('key') # response.set_cookie('key', 'value') # response.headers['X-Something'] = 'A value' # return response # res=make_response('内容xxx') # 响应对象 # res=make_response(render_template('index.html')) # 响应对象 res=make_response(jsonify({'name':'lqz'})) # 响应对象 res.set_cookie('name','lqz') # 向响应头中加东西 res.headers['xyt']='qsb' return res if __name__ == '__main__': app.run(port='8080')
二、session及源码分析
1 第一步必须配置秘钥 2 全局导入session对象 3 赋值:sesion['key']=value 4 取值:session['key'] 5 数据加密以后,放到了cookie中----(token)
源码执行流程
1 源码分析执行流程 2 请求来了在open_session中取出cookie,反解数据,包装成session---》视图函数中使用session 3 只要session修改了,请求走了---》save_session---》把session加密,放到cookie中,返回给前端 4 不同浏览器,cookie不同(你的淘宝,同一个浏览器只能登陆一个用户) 回想django中的session如何实现的? -原理一模一样,它在哪写的,在中间件中,process_request和process_response
三、闪现
1 一些数据,放在某个位置,下次请求再取出来,取完就没了(flash) 2 访问index--》name=lqz,放在某个位置 3 下次访问order---》把这个数据取出来 4 放到session中可以吗? 5 本质原理:闪现是基于session的 6 使用 -设置 flash('aaa') -取值:get_flashed_message() 7 分类 -设置:flash('超时错误',category="x1") -取值:data = get_flashed_messages(category_filter=['x1'])
四、请求扩展(Django中中间间)
# 请求扩展(等同于django中的中间件,在请求进入视图函数之前,和离开视图函数之后执行一些功能) # before_request:请求来之前执行(可以加多个,从上往下执行,等同于中间件的process_request) # after_request:请求走之后(可以加多个,从下往上执行,等同于以中间件的process_response) # before_first_request:项目运行后的第一次会执行它(初始化的工工作) # @app.teardown_request:出错也会走,记录日志 # @app.errorhandler(404):状态码是响应的,就会触发它的执行 #@app.template_global() # 全局函数,在模板中直接使用 # @app.template_filter() # 全局过滤器,在模板中直接使用 from flask import Flask,request,render_template from flask.views import MethodView app = Flask(__name__) app.debug=False # @app.before_request # def before(): # #取出访问者的ip,记录一下 # print(request.path) # print('我执行了') # # return '回去' # 直接回去了,等同于django中return Response对象 # @app.before_request # def before2(): # print('我执行了2222') # @app.after_request # def after(response): # print('我走了') # # print(response) # # response.headers['sss']='sss' # #设置cookie # return response # @app.after_request # def after2(response): # print('我走了22222') # return response # @app.before_first_request # def first(): # print('我的第一次给了这个地址',request.environ.get('REMOTE_ADDR')) # @app.teardown_request # 响应走的时候,错误也会走,记录错误日志,前提是debug为false # def ter(e): # print('我一直走') # print(e) # @app.errorhandler(404) # def error_404(arg): # return "404错误了" # # return render_template('好看的模板') # @app.errorhandler(500) # def error_500(arg): # return "500错误了" # 6 template_global 定义全局函数,直接在模板中使用 @app.template_global() def sb(a1, a2): return a1 + a2 #{{sb(1,2)}} # 7 template_filter 过滤器、 @app.template_filter() def db(a1,a2,a3,a4): return a1 + 100+a2+a3+a4 #{{ 1|db(2,3)}} @app.route('/') def hello_world(): print('我是视图函数') return render_template('index.html',a=100) if __name__ == '__main__': app.run(port=8080)