Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将AWS S3存储桶与Django一起使用时出现类型错误_Python_Django_Amazon S3 - Fatal编程技术网

Python 将AWS S3存储桶与Django一起使用时出现类型错误

Python 将AWS S3存储桶与Django一起使用时出现类型错误,python,django,amazon-s3,Python,Django,Amazon S3,我是Django和AWS S3的新手,似乎遇到了麻烦。目前这一切都在本地主机上。我正试图通过我自己的管理应用程序为我正在处理的一个美术馆网站添加一个新产品,最初添加产品时一切正常,但由于使用AWS S3,我收到以下类型错误: 该错误表示它需要“…一个字符串或类似字节的对象。”并引用mymixins.py和my staffviews.py中的以下代码行 mixins.py: from django.shortcuts import redirect class StaffUserMixin

我是Django和AWS S3的新手,似乎遇到了麻烦。目前这一切都在本地主机上。我正试图通过我自己的管理应用程序为我正在处理的一个美术馆网站添加一个新产品,最初添加产品时一切正常,但由于使用AWS S3,我收到以下类型错误:

该错误表示它需要“…一个字符串或类似字节的对象。”并引用mymixins.py和my staffviews.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)

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)
视图。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)

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存储工作

这些线路是:

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\u概要文件中标识这些变量(如果您在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"

确保使用双引号

您需要在
settings.py
文件中写入一些行,以使
django存储
正常工作

这些线路是:

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\u概要文件中标识这些变量(如果您在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"
确保使用双引号

您可以使用
print(…)
print(type(…)
查看变量中的内容以及从函数中获得的内容,即从
super(…).dispatch(…)
中获得的内容。您还可以使用
print()
更好地识别哪一行正在工作,哪一行出现问题-即
print(“超级分派前”)
它被称为
“打印调试”
您可以使用
print(…)
print(type(…)
查看变量中的内容以及从函数中获得的内容,即从
super(…).dispatch(…)
。您还可以使用
print()
更好地识别哪一行正在工作,哪一行出现问题-即
print(“超级分派前”)
它被称为
“打印调试”