目录:
【Flask学习笔记:一】开发环境部署
【Flask学习笔记:二】Flask 入门基础知识
【Flask学习笔记:三】Flask 中的 request、response
【Flask学习笔记:四】Flask 应用和请求上下文
【Flask学习笔记:五】Jinja2 模板引擎
【Flask学习笔记:六】Flask 蓝图
【Flask学习笔记:七】Flask - WTF 处理表单
【Flask学习笔记:八】Flask 中的 cookie、session
【Flask学习笔记:九】Flask-SQLAlchemy
如果要访问请求数据,可以使用全局请求对象 request。Flask 会解析传入的请求数据,并允许通过该全局对象访问它。如果处于多线程环境中,可以确保始终获得活动线程的正确数据。这个对象非常有用,包含客户端发送的 HTTP 请求的全部信息。其中最常用的属性见下表:
属性 | 说明 |
---|---|
form | 一个字典,存储请求提交的所有表单字段 |
args | 一个字典,存储通过 URL 查询字符串传递的所有参数 |
cookies | 一个字典,存储请求的所有cookie |
headers | 一个字典,存储请求的所有 HTTP 头部信息 |
files | 一个字典,存储请求上传的所有文件 |
method | HTTP 请求方法,例如 GET 或 POST |
例:
python 代码:
# 导入所需要的包
from flask import Flask, url_for, redirect, render_template, request, make_response
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['DEBUG'] = True
@app.route('/')
def index():
return redirect(url_for('login', id=1))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
print("id :" + request.args.get('id')) # 获取 GET 请求的参数 打印 id: 1
return render_template('login.html')
else:
username = request.form.get('username') # 获取 POST 请求传递的参数
file = request.files['the_file']
file.save('uploads/' + secure_filename(file.filename)) # 获取上传的文件,存储在服务器指定位置
response = make_response(render_template('success.html', username=username))
response.set_cookie('username', username) # 使用响应对象的 set_cookie 方法来设置 cookies
return response
@app.route('/get_username_cookie')
def get_username_cookie():
cookie = request.cookies.get("username") # 获取指定的 cookie
return 'cookie name is %s' % cookie
if __name__ == '__main__':
app.run(port=8080)
login.html 代码:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div>
<span>登录span>
<form action="{{ url_for('login') }}" method="post" enctype="multipart/form-data" >
<p>username: <input type="text" name="username" />p>
<p>上传文件: <input type="file" name="the_file"/>p>
<input type="submit" value="Submit" />
form>
div>
body>
html>
success.html 代码:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
登陆成功,欢迎 {{ username }}
<a href="{{ url_for('get_username_cookie') }}">获取cookie namea>
body>
html>
上传 test.txt 文件到服务器的 uploads目录下,
上传文件成功,在服务器查看存储的文件:
然后获取存储的 cookie 信息:
正确显示 cookie 信息:
Flask 调用视图函数后,会将其返回值作为响应的内容。多数情况下,响应就是一个简单的字符串,作为 HTML 页面返回给客户端。如果返回值是一个字符串,那么会被转换为一个包含作为响应体的字符串、一个 状态码(默认为 200)和一个 text/html 类型的响应对象。
如果视图函数返回的响应需要使用不同的状态码,可以把数字代码作为第二个返回值,添加到响应文本之后。例如,下述视图函数返回 400 状态码,表示请求无效:
@app.route('/')
def index():
return 'Bad Request
', 400
如果不想返回由 1 个、 2 个或 3 个值组成的元组, Flask 视图函数还可以返回一个响应对象。make_response() 函数可接受 1 个、2 个或 3 个参数(和视图返回值一样),然后返回一个等效的响应对象。
例:
@app.route('/')
def index():
response = make_response(render_template('login.html'), 400)
return response
响应对象常用的属性和方法见下表:
属性或方法 | 说明 |
---|---|
status_code | HTTP 数字状态码 |
headers | 一个类似字典的对象,包含随响应发送的所有头部信息 |
set_cookie() | 为响应添加一个 cookie |
delete_cookie | 删除一个 cookie |
content_type | 响应主体的媒体类型 |