Python Web之路:Flask第三篇

点击名片关注 阿尘blog,一起学习,一起成长

本篇接着第二篇继续讲解Flask的请求及响应,文件上传等相关内容

1 唯一url/重定向行为

这里补充两条url规则,观看下面两条规则的不同之处:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

第一个路由加上了尾斜杠,类似于文件系统的文件夹,如果访问的地址只输入了/projects那么,flask会重定向到有尾斜杠的路由/projects/

第二个规则,路由没有尾斜杠,类似于文件的路径名,如果你访问地址带上了尾斜杠 (/about/ )就会404找不到路由

这两条规则会保证资源的唯一性,有助于搜索引擎避免对同一页面进行两次索引

2 请求和响应

get请求及相应

from flask import Flask, jsonify, request

app = Flask(__name__)

# 示例数据,模拟存储在数据库中的用户信息
users = [
    {"id": 1, "name": "John Doe"},
    {"id": 2, "name": "Jane Doe"}
]

# 定义一个简单的路由,用于获取所有用户信息
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# 定义路由,用于获取特定用户的信息
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = next((user for user in users if user['id'] == user_id), None)
    if user:
        return jsonify(user)
    else:
        return jsonify({"error": "User not found"}), 404
7f4c77286a6326fbce26a2e68b62be3a.png

post请求

# 定义路由,用于创建新用户
@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()

    if 'name' in data:
        new_user = {
            'id': len(users) + 1,
            'name': data['name']
        }

        users.append(new_user)

        return jsonify(new_user), 201
    else:
        return jsonify({"error": "Name is required"}), 400

通过postman请求接口如下:

aed1dff2f47d1a63c1239350144e9e2a.png

前面我们响应请求,只是通过return直接返回了结果,而无法对HTTP状态码和头部信息进行设置和修改,如果要指定响应的状态码、内容体和头部信息,并对响应进行自定义配置那么可以使用函数make response

from flask import Flask, make_response, jsonify

app = Flask(__name__)

@app.route('/custom_response')
def custom_response():
    # 创建一个空的响应对象
    response = make_response()

    # 设置响应的内容
    response.data = "This is a custom response."

    # 设置响应的状态码
    response.status_code = 200

    # 设置响应的头部
    response.headers['Content-Type'] = 'text/plain'

    return response

3 文件上传

上传文件也是个老问题,flask也能轻松处理,看示例代码

import os
from flask import Flask, flash, request, redirect, url_for,render_template
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # If the user does not select a file, the browser submits an
        # empty file without a filename.
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('download_file', name=filename))  
    return render_template('upload.html')

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
    <form method=post enctype=multipart/form-data>
      <input type=file name=file>
      <input type=submit value=Upload>
    </form>
</body>
</html>
ed3f5ae46ec7cd0c1b3e217dc96fbb6f.png

扫描二维码关注阿尘blog,一起交流学习

913af84ecc9adca06110dc322b1f6ef4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是阿尘呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值