如何在Google App Engine Django应用的CSS中访问Cloud Storage静态资源?
GAE Django应用CSS引用GCS静态资源的解决方案
核心问题
CSS里用相对路径引用的字体、背景图等资源,是浏览器直接向Google Cloud Storage发起请求,不会携带Django staticfiles生成的认证签名;而通过{% static %}标签生成的URL自带签名,所以能正常访问。
可行解决方案
设置GCS存储桶为公开可读
适合非敏感的公开静态资源。给存储桶配置公共读取权限,这样浏览器直接请求无需认证就能获取资源。注意不要给敏感资源开此权限。动态生成CSS文件(用模板标签替换资源路径)
把静态CSS改成Django模板文件(比如命名为styles.css放在模板目录),在里面用{% static %}标签生成资源的带签名URL:@font-face { font-family: "syne"; src: url("{% static 'path/to/font.ttf' %}") format("truetype"); }然后通过Django视图渲染这个模板,或者用
django-compressor这类工具处理,确保最终输出的CSS里所有资源URL都带有认证签名。配置GAE静态资源转发规则
在app.yaml中添加静态资源路由,将CSS引用的资源路径映射到GCS存储桶,让GAE自动为请求添加认证签名:handlers: - url: /static/(.*) static_files: static/\1 upload: static/(.*) gcs_bucket: your-bucket-name secure: always这样浏览器请求CSS中的相对路径资源时,会先经过GAE处理,GAE自动补全认证信息后转发到GCS,保证请求合法。
内容的提问来源于stack exchange,提问作者lundbrundt
相关产品推荐
相关产品推荐

