Flask教程--第一个Flask应用:请求与响应

一、请求对象

在Flask中,由全局对象request提供请求信息。我们可以使用dir()方法查看request对象的所有属性:

 常用的属性有method(用于获取前端请求的方法),args(用于获取url中提交的参数)等。示例:

前端请求:

后端解析请求,根据输出可以看到请求方式是get方式,url中提交的参数是userid,且值为123456:

1.文件上传

在Flask中,上传文件首先要设置提交请求的<form>具有enctype="multipart/form-data" 属性(enctype: encoding type)。

1.已上传的文件存储在内存的临时位置,可以使用 request.files['the_file']来访问上传的文件。'the_file'名字要与前端传递过来的名字一致。

2.可以使用filename属性查看文件上传之前在客户端系统中的名字。但是这个值是可以伪造的,永远不可信。如果依然要使用上传的文件名作为文件的保存名字,可以使用Werkzeug的secure_filename()函数——当然,这样做是不推荐的。

3.使用save()方法可以将上传的文件保存到指定位置。

编写视图函数,并在/flask_demo/static/下新建upload目录用于存放上传的文件。

# -*- coding:utf-8 -*-
from flask import Flask
from flask import render_template
from flask import request
from werkzeug.utils import secure_filename

app = Flask(__name__)


@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['my_file']
        print('上传的文件名为:'+f.filename)  # 查看文件名
        f.save('./static/upload/' + secure_filename(f.filename))
        return '上传完毕'
    else:
        return render_template('index.html', name='Flask')


if __name__ == '__main__':
    app.run()

浏览器访问http://127.0.0.1:5000/upload,前端页面显示如下:

最后在前端页面点击“选择文件”按钮并选择文件,然后点击“提交文件”按钮进行提交,结果如下: 

 二、响应

视图函数的返回值会自动转换为一个响应对象。转换规则如下:

  1. 如果视图返回的是一个响应对象,那么就直接返回它。
  2. 如果返回的是一个字符串,那么根据这个字符串和缺省参数生成一个用于返回的 响应对象。
  3. 如果返回的是一个元组,那么元组中的项目可以提供额外的信息。元组中必须至少 包含一个项目,且项目应当由 (response, status, headers) 或者 (response, headers) 组成。 status 的值会重载状态代码, headers 是一个由额外头部值组成的列表或字典。
  4. 如果以上都不是,那么 Flask 会假定返回值是一个有效的 WSGI 应用并把它转换为 一个响应对象。

1.make_response()

如果想在视图函数内部修改响应对象,那么可以使用make_response()。视图函数:

请求结果: 

 

修改视图函数成如下:

 

修改后的请求结果:

2.redirect()

Flask中使用redirect()函数可以实现重定向。例如访问某个页面的时候,判断是否登陆,没有登陆就跳转到登陆页面。

3.abort()

根据给定的状态码或者WSGI应用触发HTTP异常。提前退出请求。示例:

视图函数:

请求结果: 

参考资料

[1] Flask API文档,request: https://dormousehole.readthedocs.io/en/latest/api.html#flask.Request

[2] Flask API文档, make_response(): https://dormousehole.readthedocs.io/en/latest/api.html#flask.make_response 

[3] Flask API文档, redirect(): https://dormousehole.readthedocs.io/en/latest/api.html#flask.redirect

[4] Flask API文档, abort(): https://dormousehole.readthedocs.io/en/latest/api.html#flask.abort

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值