Mik*_*ton 8 python amazon-s3 amazon-web-services flask
每次我运行我的应用程序时,它都会工作,直到我向/files
路由发送请求,在那里我得到一个ValueError: Required parameter name not set
. 该错误未指定parameter
未设置的内容。
from flask import (
Flask, render_template, redirect,
url_for, g, session, flash, request
)
from flask_session import Session
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from flask_wtf.file import FileField
from datetime import datetime
from wtforms import StringField, PasswordField, BooleanField, DateTimeField, TextField
from wtforms.validators import InputRequired, Email, Length
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import (LoginManager, UserMixin, login_user,
login_required, logout_user, current_user)
from werkzeug.utils import secure_filename
from flask_s3 import FlaskS3
import boto3
from config import S3_BUCKET, S3_KEY, S3_SECRET
s3 = boto3.client(
"s3",
aws_access_key_id=S3_KEY,
aws_secret_access_key=S3_SECRET
)
app = Flask(__name__)
app.config['FLASKS3_BUCKET_NAME'] = 'flaskprofileproject'
app.config['SECRET_KEY'] = "ASNDASNDASONDSAOIDMAODNAS"
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////Users/michaelaronian/Desktop/FlaskProject/database.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
bootstrap = Bootstrap(app)
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.init_app(app)
login_manager.login_view = 'login'
# Code removed for brevity's sake
@app.route('/files')
def files():
s3_resource = boto3.resource('s3')
my_bucket = s3_resource.Bucket(S3_BUCKET)
summaries = my_bucket.objects.all()
return render_template('files.html', my_bucket=my_bucket, files=summaries)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=4100)
Run Code Online (Sandbox Code Playgroud)
我的应用程序的其余部分运行良好。感谢您的帮助。
Boto3 允许 3 种设置凭据的方法,记录在此处。
看起来您正在使用上面链接的方法参数的第三种方法:
s3 = boto3.client(
"s3",
aws_access_key_id=S3_KEY,
aws_secret_access_key=S3_SECRET
)
Run Code Online (Sandbox Code Playgroud)
问题是,您没有使用s3
变量(存储 boto3 客户端)来访问您的资源。此方法创建一个“低级客户端”,用于对 S3 资源进行非常具体的访问。因此,如果这是您的意图,请阅读此处的课程文档Client
。
否则,您可以Boto
从环境变量中读取数据,就像这里的方法一样,然后按照上面的操作访问您的资源。
您必须设置以下环境变量(可能在~/.bash_profile
本地主机上),以便boto3
知道如何连接到您的 AWS S3 存储桶。在您的 中~/.bash_profile
,添加:
export AWS_ACCESS_KEY_ID="The access key for your AWS account."
export AWS_SECRET_ACCESS_KEY="The secret key for your AWS account."
export AWS_SESSION_TOKEN="The session key for your AWS account."
# This is only needed when you are using temporary credentials, so you can probably ignore it!
Run Code Online (Sandbox Code Playgroud)
编辑此文件后,保存它,然后运行 asource ~/.bash_profile
将新的环境变量导出到您的环境中(在启动服务器的同一 shell 中),然后启动服务器。
归档时间: |
|
查看次数: |
6102 次 |
最近记录: |