当前位置: 首页 > 知识库问答 >
问题:

django Gunicorn想直接访问static,目前static下的默认需要登录才能获取,如何修改?

屠锐
2023-09-21

url配置如下

from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

如果登录进去,静态资源访问正常,如果没有登录进去,静态资源会出现302重定向,跳转到登录页面

共有1个答案

卢雅惠
2023-09-21

这个问题是关于如何在 Django 中配置静态文件服务,特别是在使用 Gunicorn 作为WSGI服务器的情况下。根据你提供的URL配置,你在尝试访问静态文件时遇到了重定向问题。

Django中的静态文件通常通过django.views.static.serve视图来处理。但是,这个视图仅应在开发过程中使用,因为在生产环境中,它并不适合处理静态文件。生产环境中,我们通常使用Web服务器(如Nginx)或者WSGI服务器(如Gunicorn)直接处理静态文件。

你的问题看起来是serve视图在未登录的情况下尝试访问静态文件,然后被Django的安全机制检测到,从而进行了重定向。

要解决这个问题,你需要修改你的settings.py,允许serve视图在未登录的情况下访问静态文件。你可以通过设置DEBUGTrue来实现这个目标。但是,这并不推荐在生产环境中使用,因为它可能会暴露出你的应用程序的敏感信息。

另一种解决方案是创建一个新的视图,不进行身份验证,然后将其添加到URL配置中。以下是如何实现的示例:

from django.views.static import servefrom django.contrib.auth.mixins import LoginRequiredMixinclass StaticView(LoginRequiredMixin, serve):    def dispatch(self, request, *args, **kwargs):        # 去除LoginRequiredMixin的影响        self.check_perm(request)        return super().dispatch(request, *args, **kwargs)

然后在URL配置中使用这个新的视图:

path(r'^static/(?P<path>.*)$', StaticView.as_view(), {'document_root': settings.STATIC_ROOT})

这样做的结果是,任何人都可以访问静态文件,即使他们没有登录。再次强调,这可能会增加安全风险,因此只应在测试和开发环境中使用。在生产环境中,你应该使用Web服务器来处理静态文件,例如使用Nginx作为反向代理服务器。

 类似资料:
  • 我的服务注册得上eureka, 然后点击链接,正常应该显示如下信息: 但是,我的服务点击进去之后 提示需要登录 后端没有对/actuator/info进行拦截处理,不知道这个页面是怎么来的

  • 让我们举一个例子,其中SPA使用OIDC隐式流访问API。 由于OAuth作用域是粗粒度的,因此通常需要在资源服务器上执行额外的授权。例如,当通过endpoint访问动态资源(例如文件系统)时,可能会出现这种情况——在endpoint中,访问受到与用户ID相关的权限的限制,但仅使用OAuth作用域是不实际的,因为资源具有动态性。 在这些情况下,endpoint本身可以受到OAuth范围的保护,而对

  • 在PHP中编码,我尝试初始化Spotify API,不使用重定向uri,只使用client_id和client_secret。我尝试下面的代码:从响应url中提取令牌-Spotify API,但我得到一个NULL结果 我想知道我是否可以在不要求用户登录的情况下访问令牌(参见https://developer.spotify.com/web-api/authorization-guide/#auth

  • 我是Wildfly中undertow web服务器的新手。 我正在运行Wildfly8。1在域模式下,试图让undertow将访问日志写入非默认位置。当前默认值为directory=“${jboss.server.log.dir}”。我正在尝试将访问日志属性“directory”设置为如下目录=“${custom.jboss.server.log.dir}。我将这个变量定义为host-slave.

  • 我想使用谷歌云存储作为图像保护程序。我在权利上加了“诱惑者”。我参考了这一页。https://cloud.google.com/storage/docs/access-control/making-data-public 我可以从登录谷歌的任何帐户访问该图像。但当我从谷歌注销时。我看不到图像。当我点击链接的图片时,它会重定向到谷歌登录页面。 是否可以在不登录的情况下访问图像? ex:https:/

  • SpringBoot2.0版本 WebMvcConfigurer 接口,然后重写addViewControllers方法即可 @Configuration public class WebConfigurer implements WebMvcConfigurer{ @Override public void addViewControllers(ViewControllerRegi