【Flask学习笔记:三】Flask 中的 request、response

目录:
  【Flask学习笔记:一】开发环境部署
  【Flask学习笔记:二】Flask 入门基础知识
  【Flask学习笔记:三】Flask 中的 request、response
  【Flask学习笔记:四】Flask 应用和请求上下文
  【Flask学习笔记:五】Jinja2 模板引擎
  【Flask学习笔记:六】Flask 蓝图
  【Flask学习笔记:七】Flask - WTF 处理表单
  【Flask学习笔记:八】Flask 中的 cookie、session
  【Flask学习笔记:九】Flask-SQLAlchemy

【Flask学习笔记:三】Flask 中的 request、response

一、request

如果要访问请求数据,可以使用全局请求对象 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目录下,
【Flask学习笔记:三】Flask 中的 request、response_第1张图片
上传文件成功,在服务器查看存储的文件:
【Flask学习笔记:三】Flask 中的 request、response_第2张图片
然后获取存储的 cookie 信息:
【Flask学习笔记:三】Flask 中的 request、response_第3张图片
正确显示 cookie 信息:
【Flask学习笔记:三】Flask 中的 request、response_第4张图片

二、response

Flask 调用视图函数后,会将其返回值作为响应的内容。多数情况下,响应就是一个简单的字符串,作为 HTML 页面返回给客户端。如果返回值是一个字符串,那么会被转换为一个包含作为响应体的字符串、一个 状态码(默认为 200)和一个 text/html 类型的响应对象。
如果视图函数返回的响应需要使用不同的状态码,可以把数字代码作为第二个返回值,添加到响应文本之后。例如,下述视图函数返回 400 状态码,表示请求无效:

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

Bad Request

'
, 400

【Flask学习笔记:三】Flask 中的 request、response_第5张图片
如果不想返回由 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 响应主体的媒体类型

你可能感兴趣的:(Flask,python,flask)