'WSGIRequest'类型的对象没有len()

时间:2016-11-14 20:29:06

标签: django python-3.x celery wsgi

我正在使用当前的Celery 4.0.0,redis-server stable和rabbitmq运行Python3 Django 1.10.3。在Windows和Linux ubuntu上都会发生此错误。谷歌搜索此错误并未产生任何结论性结果。

这是错误堆栈:

Environment:


Request Method: POST
Request URL: https://*/rod/eposta/?cid=17

Django Version: 1.10.3
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'vodnik',
 'schedule',
 'djangobower']
Installed 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.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.5/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/usr/local/lib/python3.5/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/var/www/etaborniki/rod/views.py" in eposta
  133.                     email = rodSendEmail.delay(zadeva, clan, sporocilo, request, msgid)

File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py" in delay
  413.         return self.apply_async(args, kwargs)

File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py" in apply_async
  536.             **options

File "/usr/local/lib/python3.5/dist-packages/celery/app/base.py" in send_task
  709.             root_id, parent_id, shadow, chain,

File "/usr/local/lib/python3.5/dist-packages/celery/app/amqp.py" in as_task_v2
  333.             argsrepr = saferepr(args, self.argsrepr_maxsize)

File "/usr/local/lib/python3.5/dist-packages/celery/utils/saferepr.py" in saferepr
  74.         o, maxlen=maxlen, maxlevels=maxlevels, seen=seen

File "/usr/local/lib/python3.5/dist-packages/celery/utils/saferepr.py" in _saferepr
  104.     for token, it in reprstream(stack, seen=seen, maxlevels=maxlevels):

File "/usr/local/lib/python3.5/dist-packages/celery/utils/saferepr.py" in reprstream
  155.         for val in it:

File "/usr/local/lib/python3.5/dist-packages/celery/utils/saferepr.py" in _chainlist
  91.     size = len(it)

Exception Type: TypeError at /rod/eposta/
Exception Value: object of type 'WSGIRequest' has no len()

导致此错误的代码是:

email = rodSendEmail.delay(zadeva, clan, sporocilo, request, msgid)

和任务链接:

@shared_task
def rodSendEmail(zadeva, clan, body, request, msgid):
    try:
        now = str(datetime.datetime.utcnow().replace(tzinfo=utc))
        plaintext = get_template('rod/email/clani_msg.txt')
        htmly = get_template('rod/email/clani_msg.html')
        d = Context(
            {
                'message': body,
                'rodIme': request.user.info.rod.rodIme,
                'rodNaslov': request.user.info.rod.rodNaslov,
                'pattern': 'erod',
            }
        )
        strFrom = str(request.user.get_full_name()) + ' via eRod<erod@ksoft.si>'
        subject, from_email, to, replyto = zadeva, strFrom, [clan.clanEmail], [
            request.user.info.rod.rodEmail]
        text_content = plaintext.render(d)
        html_content = htmly.render(d)
        msg = EmailMultiAlternatives(subject, text_content, from_email, to, reply_to=replyto,
                                     headers={
                                         'X-KSOFT-MSGID': msgid,
                                         'X-KSOFT-REPLYTO': request.user.id,
                                         'X-KSOFT-DATE': now,
                                         'X-KSOFT-ROD': request.user.info.rod.id,
                                     })
        msg.attach_alternative(html_content, "text/html")

        msg.mixed_subtype = 'related'

        msg.send()
    except smtplib.SMTPException:
        return False
    finally:
        return True

0 个答案:

没有答案