You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Django v4.0的整站(含静态文件)访问控制方案咨询

实现Django整站访问控制(含静态文件)的方案

核心思路

通过自定义中间件拦截所有请求(包括静态文件),验证请求中携带的访问码是否与环境变量中的值一致,不一致则返回未授权页面。

具体实现步骤

1. 配置环境变量

在Heroku应用设置中添加环境变量SITE_ACCESS_CODE,设置你的专属访问码。本地开发可在.env文件中添加:

SITE_ACCESS_CODE=your_strong_access_code_here

2. 创建自定义中间件

在项目中新建中间件文件middleware/site_access_middleware.py,代码如下:

import os
from django.http import HttpResponseForbidden

class SiteAccessControlMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        self.valid_code = os.environ.get('SITE_ACCESS_CODE')
        # 可添加无需验证的路径,比如健康检查接口
        self.exempt_paths = ['/health-check/']

    def __call__(self, request):
        # 跳过豁免路径的验证
        if request.path in self.exempt_paths:
            return self.get_response(request)
        
        # 从URL参数或Cookie获取访问码
        access_code = request.GET.get('access_code') or request.COOKIES.get('site_access')
        
        if not access_code or access_code != self.valid_code:
            return HttpResponseForbidden("请提供有效的访问码")
        
        response = self.get_response(request)
        # 验证通过后设置Cookie,避免重复输入(有效期1天)
        response.set_cookie('site_access', access_code, max_age=86400)
        return response

3. 注册中间件

在settings.py的MIDDLEWARE列表最上方添加自定义中间件,确保优先拦截所有请求:

MIDDLEWARE = [
    'your_project_name.middleware.site_access_middleware.SiteAccessControlMiddleware',
    # 其他中间件按原有顺序保留
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # ...
]

4. 确保静态文件受控制

Heroku上静态文件默认由whitenoise托管,需将WhiteNoiseMiddleware放在自定义中间件之后,保证静态文件请求也经过访问码验证。

5. 功能验证

  • 本地启动项目,直接访问页面会返回403未授权
  • 访问http://localhost:8000/?access_code=your_strong_access_code_here,验证通过后会自动设置Cookie,后续访问无需重复输入
  • 部署到Heroku后,确认环境变量已配置,重复上述测试流程

注意事项

  • 访问码需设置为高强度字符串,降低被猜测风险
  • 豁免路径可根据实际需求调整,比如robots.txt或监控接口
  • 生产环境必须配合HTTPS使用,防止访问码在传输过程中被窃取
  • 若需支持多访问码或动态管理,可扩展中间件从数据库读取有效码列表

内容的提问来源于stack exchange,提问作者SimpleNibble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:19:21