django – ‘可疑操作:在加载静态文件时尝试访问“”拒绝“
发布时间:2020-12-20 11:59:40 所属栏目:Python 来源:网络整理
导读:我已经通过使用亚马逊s3在Heroku上设置我的Django应用程序来设置静态和媒体文件.我一直在关注这个指南 https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/和看起来像成千上万的其他资源,coll
我已经通过使用亚马逊s3在Heroku上设置我的Django应用程序来设置静态和媒体文件.我一直在关注这个指南
https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/和看起来像成千上万的其他资源,collectstatic已经工作,heroku正在部署它 – 但显示400错误.当我尝试在本地运行它时,我获得更多信息:
Attempted access to '/css/reset.css' denied. 这是突出显示的行: <link rel="stylesheet" type="text/css" href="{% static '/css/reset.css' %}"> 我可以直接从URL加载静态文件,如果我从我的s3管理面板中获取它,所以我认为这不是一个存储桶策略问题,我已经搞砸了https / http选项,但没有快乐.所以我认为它必须是在代码中以某种方式被调用的错误路径 – 我只是看不到哪里! 任何帮助非常感谢,我不认为我已经眨了大约4个小时. 追溯: File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/storages/backends/s3boto.py" in _normalize_name 358. return safe_join(self.location,name) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/storages/backends/s3boto.py" in safe_join 59. raise ValueError('the joined path is located outside of the base path' During handling of the above exception (the joined path is located outside of the base path component),another exception occurred: File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 41. response = get_response(request) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 187. response = self.process_exception_by_middleware(e,request) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 185. response = wrapped_callback(request,*callback_args,**callback_kwargs) File "/home/devtop/webdev/projects/intro/intro/profiles/views.py" in index 14. return render(request,'home.html',{'welcome':welcome}) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/shortcuts.py" in render 30. content = loader.render_to_string(template_name,context,request,using=using) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/loader.py" in render_to_string 68. return template.render(context,request) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/backends/django.py" in render 66. return self.template.render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in render 207. return self._render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in _render 199. return self.nodelist.render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in render 990. bit = node.render_annotated(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in render_annotated 957. return self.render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/loader_tags.py" in render 177. return compiled_parent._render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in _render 199. return self.nodelist.render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in render 990. bit = node.render_annotated(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/template/base.py" in render_annotated 957. return self.render(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/templatetags/static.py" in render 105. url = self.url(context) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/templatetags/static.py" in url 102. return self.handle_simple(path) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/django/templatetags/static.py" in handle_simple 117. return staticfiles_storage.url(path) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/storages/backends/s3boto.py" in url 487. name = self._normalize_name(self._clean_name(name)) File "/home/devtop/webdev/projects/intro/myvenv/lib/python3.5/site-packages/storages/backends/s3boto.py" in _normalize_name 361. name) Exception Type: SuspiciousOperation at / Exception Value: Attempted access to '/css/reset.css' denied. settings.py AWS_ACCESS_KEY_ID=os.environ.get('AWS_ACCESS_KEY_ID',None) AWS_SECRET_KEY=os.environ.get('AWS_SECRET_KEY',None) AWS_SECRET_ACCESS_KEY=os.environ.get('AWS_SECRET_KEY',None) AWS_STORAGE_BUCKET_NAME = 'intro-story' AWS_S3_HOST='s3.us-east-2.amazonaws.com' AWS_S3_CUSTOM_DOMAIN = 's3.us-east-2.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME AWS_S3_SECURE_URLS = False STATICFILES_LOCATION = 'static' STATICFILES_STORAGE = 'custom_storages.StaticStorage' STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN,STATICFILES_LOCATION) MEDIAFILES_LOCATION = 'media' MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN,MEDIAFILES_LOCATION) DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage' try: from .local_settings import * except ImportError: pass local_settings.py AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "yyy" custom_storages.py from django.conf import settings from storages.backends.s3boto import S3BotoStorage class StaticStorage(S3BotoStorage): location = settings.STATICFILES_LOCATION class MediaStorage(S3BotoStorage): location = settings.MEDIAFILES_LOCATION 编辑: 我设法通过搞乱settings.py中的各种值来使它工作,但仍然不对. 以下是与静态和媒体路径相关的所有内容 STATICFILES_LOCATION = 'static' MEDIAFILES_LOCATION = 'media' import custom_storages STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN,STATICFILES_LOCATION) STATICFILES_STORAGE = 'custom_storages.StaticStorage' MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN,MEDIAFILES_LOCATION) DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage' 这是我正在导入的custom_storage: from django.conf import settings from storages.backends.s3boto import S3BotoStorage class StaticStorage(S3BotoStorage): location = settings.STATICFILES_LOCATION class MediaStorage(S3BotoStorage): location = settings.MEDIAFILES_LOCATION 现在,如果我发表评论 STATICFILES_STORAGE = 'custom_storages.StaticStorage' 它将从S3加载静态文件,一切都很好,但是collectstatic失败了.如果我取消注释该行,collectstatic可以正常工作但是当我尝试加载该站点时它会出错.错误是: # Ensure final_path starts with base_path and that the next character after # the final path is '/' (or nothing,in which case final_path must be # equal to base_path). base_path_len = len(base_path) if (not final_path.startswith(base_path) or final_path[base_path_len:base_path_len + 1] not in ('','/')): raise ValueError('the joined path is located outside of the base path' ... ' component') return final_path.lstrip('/') 很明显,custom_storage部分有些东西,但我不知道是什么:/ 解决方法
排序!正如预期的那样,这是一件非常简单的事情,但也许这将有助于其他任何打同一面墙的人.
这个: <link rel="stylesheet" type="text/css" href="{% static '/css/reset.css' %}"> 需要这样: <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}"> 即href中没有前导斜线.使用本地静态文件存储工作正常,但打破了S3链接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python获取mp3文件信息的方法
- django – 引用的交易不符合发放信用的标准
- 在Python中与Singleton共享Declarative_Base(SQLAlchemy)
- python – Django – 使用ManyToManyField进行反向查找
- 看看大牛是怎么用Web接口开发与自动化测试基于Python语言
- python包含中文字符串长度
- python – Selenium’WebElement’对象没有属性’Get_Attri
- 我正在编写嵌套的while循环,这些循环越来越不切实际(> 12个
- 2018年GitHub最流行50大Python开源项目!你知道几个?
- python – asyncio.as_completed是否会产生期货或协同程序