Flask初步(2)

程序上下文、请求上下文
请求对象封装了客户端发送的HTTP请求
Flask使用上下文把一些对象变成全局可访问的,比如请求对象。这样就不用每个视图函数都用一个参数接收请求对象了。
注意,上下文只是使请求对象看上去全局可访问,请求对象不是全局变量。多线程服务器的每个线程处理不同客户端的请求时,看到的是不同的请求对象。
因此,在视图函数外使用请求对象没有意义。

例:在视图函数外访问请求对象报错。运行下面的程序,在浏览器中访问127.0.0.1:5000,控制台就会报错。

import flask

app = flask.Flask(__name__)

@app.route('/')
def index():
    return'<p></p>'

print(flask.current_app)
print(flask.g)
print(flask.request)
print(flask.session)

if __name__=='__main__':
    app.run(debug=True);

例:使用request对象。

import flask

app = flask.Flask(__name__)

@app.route('/')
def index():
	return'<p>%s</p>'%flask.request.headers.get('User-Agent')

if __name__=='__main__':
	app.run(debug=True);

使用get从字典里取值时,若键不存在,返回第2个参数;
使用下标运算符从字典里取值时,若键不存在,抛出异常。

程序上下文

  • current_app 当前激活程序的程序实例
  • g 处理请求时用作临时存储的对象,每次请求都会重设这个变量

请求上下文

  • request 封装了客户端发出的HTTP请求中的内容
  • session 用户会话,是1个用于存储请求之间需要“记住”的值的字典

例:current_app,无论视图函数在哪个文件,都可以快速找到程序实例。

import flask

app = flask.Flask(__name__)

@app.route('/')
def index():
    print(flask.current_app)
    print(app)
    print(flask.current_app==app)
    return'<p></p>'

if __name__=='__main__':
    app.run(debug=True);

默认情况下,session保存在客户端cookie中,使用设置的密钥进行加密。

设置密钥方法:app.config['SECRET_KEY']=保密的字符串

import flask

app = flask.Flask(__name__)
app.config['SECRET_KEY']='123465'

@app.route('/')
def index():
    a=flask.session.get('a',0)
    print(a)
    flask.session['a']=a+1
    return'<p></p>'

if __name__=='__main__':
    app.run(debug=True);

如果不设置密钥就使用session,控制台就会报错。

g的使用方法等介绍请求钩子的时候(不一定会介绍)再说。简单地说,就是一次请求让flask调用了你写的多个函数,这几个函数之间要传递信息,可以使用g。

参考书:《Flask Web开发:基于Python的Web应用开发实战》,人民邮电出版社

使用session和requests.forms(处理表单的),就可以实现现代网站的一切功能了(可能会有点小瑕疵)。

剩下的就是介绍flask的各种插件了。

猜你喜欢

转载自blog.csdn.net/jhcarl0814/article/details/81110820