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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值