首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS dev服务器Django-3.1中没有出现在admin中的消息

AWS dev服务器Django-3.1中没有出现在admin中的消息
EN

Stack Overflow用户
提问于 2022-01-20 15:56:53
回答 1查看 121关注 0票数 2

上下文:Django 3.1app部署到一个具有terraform的AWS中。我还没有设置我的生产设置,这是我的开发服务器。

我用的是https://github.com/adamchainz/apig-wsgi

我注意到来自django.contrib.messages的消息在试图通过djangorestframework-api-key通过管理获取api密钥时不会出现。它位于lambda上,意味着我无法以编程方式访问lambda来创建api密钥。

注意到django-debug-toolbar也不起作用,而且很安静,所以我很怀疑我的context_processors设置是关闭的,所以我没有messagesDEBUG变量,但是在我的设置中找不到问题??下面是我的代码,没有调试工具栏设置。

project/settings/base.py

代码语言:javascript
复制
DEBUG = True 

INSTALLED_APPS = [
    'app',

    'rest_framework',
    'rest_framework_api_key',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'

AWS_STORAGE_BUCKET_NAME= [redacted]

AWS_DEFAULT_ACL = [redacted]
AWS_QUERYSTRING_AUTH= [redacted]
AWS_S3_REGION_NAME = [redacted]
AWS_LOCATION = [redacted]

USE_I18N = True

STATIC_URL = '/static/'

REST_FRAMEWORK = {
...
    'DEFAULT_PERMISSION_CLASSES': [
        "rest_framework_api_key.permissions.HasAPIKey",
    ]
}

project/wsgi.py

代码语言:javascript
复制
import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

application = get_wsgi_application()

lambda_function.py

代码语言:javascript
复制
def install_secrets():
    """Add the secrets from the secret named by ENV_SECRET_ID to os.environ"""
    import os
    secret_id = os.environ.get('ENV_SECRET_ID')
    if not secret_id:
        return
        
    import boto3
    import json
    

    session = boto3.session.Session()
    client = session.client('secretsmanager')
    response = client.get_secret_value(SecretId=secret_id)
    overlay = json.loads(response['SecretString'])
    os.environ.update(overlay)
    

def manage(event, context):
    """Entry point for running a management command. Supported formats:

    - "migrate!"
    - ["migrate"]
    - {"command": ["migrate"]}
    """
    if isinstance(event, dict):
        command = event['command']
    else:
        command = event
    if isinstance(command, str):
        command = command.split()

    install_secrets()
    from django.core.wsgi import get_wsgi_application
    get_wsgi_application()  # Initialize Django
    from django.core import management
    return management.call_command(*command)


_real_handler = None


def lambda_handler(event, context):
    """Entry point for web requests"""
    global _real_handler

    if _real_handler is None:
        print('No Cache, getting secrets.')
        install_secrets()
        from apig_wsgi import make_lambda_handler
        from django.core.wsgi import get_wsgi_application
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
        application = get_wsgi_application()
        _real_handler = make_lambda_handler(application)

    return _real_handler(event, context)

默认的管理模板admin/base.html,在这里我期望消息会出现(它只是循环遍历messages对象,不需要任何JS或CSS出现):https://github.com/django/django/blob/2d8232fa716f5fe46eec9f35a0e90c2d0f126279/django/contrib/admin/templates/admin/base.html#L82

代码语言:javascript
复制
        {% block messages %}
          {% if messages %}
            <ul class="messagelist">{% for message in messages %}
              <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
            {% endfor %}</ul>
          {% endif %}
        {% endblock messages %}

requirements.txt

代码语言:javascript
复制
Django>=3.1,<3.2
django-storages==1.11.1
apig-wsgi
psycopg2-binary
djangorestframework
djangorestframework-api-key==2.1.0

尝试:

  • 尝试了硬重新加载F5
  • 尝试添加django调试工具栏和记录管理中消息中显示的像素键,但是没有工作,因为工具栏也没有显示(在上面的代码中没有显示)
  • 尝试了在dev服务器上进行收集,
  • 尝试检查用户会话并查看用户会话上的消息,其中有< code >H 231F 232
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 13:47:34

一位才华横溢的同事解决了这个问题。添加

代码语言:javascript
复制
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

您的设置解决了这个问题。

贷给https://stackoverflow.com/users/1394697/flipperpa

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70789394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档