Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于接收AWS工作层请求的Elastic Beanstalk中的Django POST侦听器_Python_Django_Amazon Web Services_Amazon Ec2_Worker - Fatal编程技术网

Python 用于接收AWS工作层请求的Elastic Beanstalk中的Django POST侦听器

Python 用于接收AWS工作层请求的Elastic Beanstalk中的Django POST侦听器,python,django,amazon-web-services,amazon-ec2,worker,Python,Django,Amazon Web Services,Amazon Ec2,Worker,我正在尝试设置工作环境以运行后台任务。我在两个环境中运行相同的应用程序版本,一个是web服务器,另一个是Worker 我需要根据过期日期定期删除文件。我已将视图映射为本地主机上的URL,消息将作为HTTP POST请求转发。正在计划任务,似乎SQS正在运行,但所有消息都位于WorkerDeadLetterQueue 在日志文件中,我收到了请求,但出现了403错误: /var/log/httpd/access\u log: “发布/网络应用程序/删除过期文件HTTP/1.1“403 2629”-“

我正在尝试设置工作环境以运行后台任务。我在两个环境中运行相同的应用程序版本,一个是web服务器,另一个是Worker

我需要根据过期日期定期删除文件。我已将视图映射为本地主机上的URL,消息将作为HTTP POST请求转发。正在计划任务,似乎SQS正在运行,但所有消息都位于WorkerDeadLetterQueue

在日志文件中,我收到了请求,但出现了403错误:

/var/log/httpd/access\u log:

“发布/网络应用程序/删除过期文件HTTP/1.1“403 2629”-“aws sqsd/2.0”

这是在/var/log/aws sqsd/default.log

信息:发送至%[ 2016-01-23T14:58:05Z http错误:d5f645cf-ce15-40bc-8ee3-34acb79e797b(4)403-0.007

这是我的视图.py代码:

def delete_expired_files(request):
    if request.method == 'POST':
        users = DemoUser.objects.all()
        for user in users:
            documents = Document.objects.filter(owner=user.id)
            if documents:
                for doc in documents:
                    now = timezone.now()
                    if now >= doc.date_published + timedelta(days = doc.owner.group.valid_time):
                        doc.delete()
cron.yaml文件:

version: 1
cron:
 - name: "delete_expired_files"
   url: "/networks_app/delete_expired_files"   
   schedule: "* * * * *" 
如果我通过浏览器访问URL,它会在我的web应用程序服务器的日志文件中显示一个GET请求

我应该怎么做才能让工作环境执行任务?
为什么当工作者尝试发送消息时,返回403错误?
是否与角色权限相关?
我应该用Django编写一个特定的侦听器吗?

使用芹菜是解决此问题的最佳方法吗?

创建POST请求的内部SQS守护程序不包括CSRF令牌,这可能导致“403禁止”错误

一个潜在的解决方法是将该方法标记为csrf_豁免:

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def index(request):
    return HttpResponse("hello, world")

如果您想要一个库来为您处理这个问题,您可以尝试使用这个包