繁体   English   中英

将 AWS S3 存储桶与 Django 一起使用时出现 TypeError

[英]TypeError when using AWS S3 Bucket with Django

我是 Django 和 AWS S3 的新手,似乎碰壁了。 目前这一切都在 localhost 上。 我正在尝试通过我自己的管理应用程序为我正在开发的 Art Gallery 网站添加新产品,最初在添加产品时一切正常,但由于使用 AWS S3,我收到以下 TypeError:

在此处输入图像描述

在此处输入图像描述

该错误表明它期待“......一个字符串或字节,如 object”。 并在我的mixins.py和我的员工views.py中引用以下代码行

mixins.py:

from django.shortcuts import redirect


class StaffUserMixin(object):
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_staff:
            return redirect("home")
        return super(StaffUserMixin, self).dispatch(request, *args, **kwargs)

视图.py:

class ProductCreateView(LoginRequiredMixin, StaffUserMixin, generic.CreateView):
    template_name = 'staff/product_create.html'
    form_class = ProductForm

    def get_success_url(self):
        return reverse("staff:product-list")

    def form_valid(self, form):
        form.save()
        return super(ProductCreateView, self).form_valid(form)

正如我在开始时所说的那样,我对 Django 和 AWS S3 都很陌生,所以如果这只是一个小学生的错误,请原谅我,但任何帮助都会很棒。 如果需要任何其他信息,我很乐意提供。 谢谢!

你需要在你的settings.py文件中写一些行来让django-storages工作。

这些行是:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

并且您需要在.bash_profile文件中识别这些变量(如果您在 Mac 上),以便出于安全原因它们不会提交给您的版本控制系统。

您需要遵循以下语法:

export AWS_ACCESS_KEY_ID="YOUR_ID" **(NO SPACES)**
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY"
export AWS_STORAGE_BUCKET_NAME="YOUR_BUCKET_NAME"

然后您需要使用configVars向 Heroku (我遇到此错误)提供此数据。

在您的终端/命令行中:

heroku config:set AWS_ACCESS_KEY_ID="YOUR_ID"
heroku config:set AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY"
heroku config:set AWS_STORAGE_BUCKET_NAME="YOUR_BUCKET_NAME"

确保使用双引号!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM