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


Python Web之路:Flask第三篇

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请求接口如下:

Python Web之路:Flask第三篇

前面我们响应请求,只是通过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>
Python Web之路:Flask第三篇




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



原文始发于微信公众号(阿尘blog):Python Web之路:Flask第三篇

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188308.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!