HTTP相关
![flask流程简图](https://i-blog.csdnimg.cn/blog_migrate/c6a71d9a5951cfa9d022e5d81045cf88.png)
1. http请求
1.1 URL组成
信息 | 说明 |
---|
http:// | 协议字符,表示协议类型 |
/blubyte.com | 主机服务器地址,域名表示 |
/root/home | URL规则 |
?name=blubyte & high=160 | 查询字符串,用&分隔键值对 |
1.2 Request对象
1. Flask的request对象封装了请求报文中的所有字段数据(请求时的查询字符串、URL、Cookie、http方法等),可以调用request对象的属性或方法来获得。
2. 需要 from flask import request,来导入对象。
3. 像args,form等字典对象,获取值时,不要用类似“args[键名]”的方式来获取,取代之用字典get()方法 , 因为第一种方式如果没有对应值则会报错,而第二种get()方法的第二个参数可以设置默认值。
request对象常用的属性及方法 | 说明 | 注意 |
---|
args | 储存解析后的查询字符串 | 此属性是一字典对象,可用字典的get()方法获取值 |
form | 储存解析后的表单 | 此属性是一字典对象 |
cookies | 包含随请求提交的cookies字典 | 此属性是一字典对象 |
data | 字符串形式的请求数据 | |
method | 获取http请求方法 | |
path | 获取URL的主机地址后的URL规则 | 如:http://baidu.com/home ,经过request.path之后就是‘/home ’ |
referrer | 存储上次请求的URL | 第一次请求时会是空值 |
1.3 设置路由监听http方法
操作代码 | 说明 |
---|
@app.route('/',methods=[‘GET’,‘POST’]) | 设置路由可监听GET和POST方法,注意method是个列表 |
1.4 请求钩子
钩子 | 作用 |
---|
before_first_request | |
before_request | |
after_request | |
- 请求钩子可用在设置上下文变量,常与g合用
- 请求钩子也可在连接,断开数据库时使用
2. http响应
2.1 响应状态码
状态码 | 基本意义 |
---|
2 - - | 成功 |
3 - - | 重定向 |
4 - - | 客户端错误 |
5 - - | 服务端错误 |
2.2 重定向响应
Flask重定向方法 | 代码 |
---|
在视图函数的返回值中,可用 [主体],[状态码],[响应报文首部字段] 的 形式 | return "[主体]" ,302,{'Location': '[URL]'} |
使用 flask 的 redirect 函数,用 URL 作 参数,生成重定向响应 | return redirect('[URL]') |
redirect函数默认响应状态码是302,可在函数的第二个参数或用‘code=[状态码]’定制其他状态码
2.3 错误响应处理
处理方法 | 代码 |
---|
使用 errorhandler 装饰器 | @app.errorhandler([状态码])
def [错误视图函数名] (e): return [响应主体] |
使用 abort 函数,传入状态码作参数 | @app.route('/')
def [视图函数名](): abort([状态码]) |
注意执行abort函数后,其下代码都不会执行
2.4 Response对象
创建过程 | 代码 |
---|
导入make_response函数 | from flask import make_response |
传入响应主体为参数,生成Response类对象 | response = make_reponse('[响应主体]') |
Response类对象的常用属性及方法 | 说明 |
---|
status_code | 整数类的状态码 |
status | 状态码,文本类型 |
headers | 响应报文首部,是一个字典对象 |
set_cookie() | 设置cookie |
2.5 Cookie
- 创建用 response 对象的 set_cookie() 方法
- 查询用request对象的cookies属性的get()方法
创建Cookie | 代码 |
---|
建立Response对象 | response = make_reponse('[响应主体]') |
用set_cookie()方法设置 | response.set_cookie([键],[值]) |
查询Cookie | 代码 |
---|
使用request对象的cookies属性 | request.cookies.get([键],[默认值]) |
2.6 Session对象
设置密钥 | 代码 |
---|
通过Flask类的secret_key属性设置 | app.secret_key = [随机代码] |
通过os模块的的getenv()方法获取环境变量值 | app.secret_key = os.getenv('SECRET_KEY',[如没有环境变量,则取该值]) |
- session 是一个字典对象,可像字典一样操作
- session 对数据加密后,数据存储在一个叫session的Cookie中
- 在session中任然不安全,所以还是别把敏感信息放到session中
- 再使用session之前必须先设置一个密钥
步骤 | 代码 |
---|
导入session | from flask import session |
添加到session | session[键] = [值] |
在session中查询 | session.get([键],[默认值]) |
从session中删除 | session.pop([键]) |