flask的上下文、run的管理机制、页面的过滤器

mac2024-02-19  50

flask的一些基础知识点

1、上下文(相当于容器,保存运行过程中的信息)

1.1请求上下文

请求上下文: 1.request包含args,data,cookie等 2.session用于存储,敏感的用户信息

request中包含很多的属性,可以通过‘.’的方式将其取出,主要有method(请求方式)、form(表单数据)、args(传递的参数)、data(请求正文)、file(传递的文件)等 注:request传递的文件可以通过request.files.get(‘文件名’)取出,因为这样不会报错,没有该文件的话返回的是None,还可以将其.save(‘路径’)指定保存路径 session存储方式: 1、直接存在客户端的cookie中 2、存在服务端,mysql,redis,mongodb……

#设置cookie,设置生命周期 @app.route('/set_cookie',methods=['GET','POST']) def set_cookie(): response_obj = make_response() response_obj.headers['X-Parachutes'] = 'parachutes are cool' response_obj.set_cookie('name','sjl',max_age=3600) return response_obj #获取cookie @app.route('/get_cookie') def get_cookie(): print(request.cookies) #取值,没有默认为None print(request.cookies.get('age','找不到')) return 'ok' #设置session @app.route('/set_session') def set_session(): session['hello']='python' return 'ok' #获取session @app.route('/get_session') def get_session(): print(session.get('hello')) return 'ok'

在设置session的时候必须要设置app.secret_key

1.2 应用上下文

应用程序中的变量 有current_app #为current_app赋值 @app.route('/getname') def app_info(): current_app.test='python' return current_app.name #取出刚才赋值的内容 @app.route('/newname') def app_info_new(): return current_app.test

current_app和g都属于应用上下文对象。 current_app:表示当前运行程序文件的程序实例。

g:处理请求时,用于临时存储的对象,每次请求都会重设这个变量。比如:我们可以获取一些临时请求的用户信息。

当调用app = Flask(name)的时候,创建了程序应用对象app; request 在每次http请求发生时,WSGI server调用Flask.call();然后在Flask内部创建的request对象; app的生命周期大于request和g,一个app存活期间,可能发生多次http请求,所以就会有多个request和g。 最终传入视图函数,通过return、redirect或render_template生成response对象,返回给客户端。 区别: 请求上下文:保存了客户端和服务器交互的数据。 应用上下文:在flask程序运行过程中,保存的一些配置信息,比如程序文件名、数据库的连接、用户信息等。

run的管理机制

首先将app=Flask(name)的app传给管理器

manger = Manager(app)

然后将入口方法改为

if __name__=='__main__': manger.run()

即可 然后我们可以在终端(在工作空间中)通过 python 该文件名.后缀 runserver --port+(端口号,默认5000) 启动该文件 也可以通过python 该文件名.后缀 runserver --help查看使用的方法

3、页面的过滤器

@app.route('/index') def index(): dict1 = { 'name':'zhang', 'age':18 } list1=[4,5296,126,12,3,1,85,52] return render_template('index.html',list1=list1,dict1=dict1)

上述代码块,我向index.html页面传递了两个参数 然后在html页面我进行如下操作

{{ dict1['name'] }}//获取name的值,zhang {{ dict1.name }}//获取name的值,zhang <h1>过滤器</h1> {#{{ 变量|过滤器 }}#} {{ dict1.name|upper|reverse}}//获取name的值,并且全部大写然后反向输出,GNAHZ {{ '<div>hello</div>'| upper }}//大写,<DIV>HELLO</DIV> {{ '<div>hello</div>'| safe | upper }}//大写,标签起作用,HELLO {{ list1 | sort }}//排序 {{ list1 | length }}//列表长度 {{ list1 | sum }}//列表求和 {{ list1 | first }}//列表第一个数字 {{ list1 | last }}//列表最后一个数字
最新回复(0)