2011-12-05 19 views
1

新しいパスワードでローカライズされたメールを送信しようとしています。私がメールを送信しようとすると、それがクラッシュするようだ:私のエラーは何を意味していますか?

Traceback (most recent call last): 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 174, in Handle 
    result = handler(self._environ, self._StartResponse) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1519, in __call__ 
    response = self._internal_error(e) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~montaoproject/newhome.355152717011517235/main.py", line 1962, in post 
    message.send() 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 887, in send 
    message = self.ToProto() 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 1122, in ToProto 
    message = super(EmailMessage, self).ToProto() 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 830, in ToProto 
    message.set_subject(_to_str(self.subject)) 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/_internal/proto1/internal/cpp_message.py", line 91, in Setter 
    self._cmsg.SetScalar(cdescriptor, value) 
TypeError: <class 'django.utils.functional.__proxy__'> has type <class 'django.utils.functional.__proxy__'>, but expected one of: str, unicode 

私のコードは次のとおりです。

def post(self, key): 
    ad = db.get(db.Key(key)) 
    if not ad: # or not ad.published: 
     self.error(404) 
     return 
    email = self.request.POST['email'] 
    if ad.email == email or ad.user.email() == email: 
     size = 9 
     vowels = 'aeiou' 
     consonants = 'bcdfghjklmnpqrstvwxyz' 
     password = '' 
     from random import randint 
     from random import choice 
     import random 
     minpairs = 4 
     maxpairs = 6 
     for x in range(1, random.randint(int(minpairs), 
         int(maxpairs))): 
      consonant = consonants[random.randint(1, 
        len(consonants) - 1)] 
      if random.choice([1, 0]): 
       consonant = string.upper(consonant) 
      password = password + consonant 
      vowel = vowels[random.randint(1, len(vowels) - 1)] 
      if random.choice([1, 0]): 
       vowel = string.upper(vowel) 
      password = password + vowel 
      newpasswd = password 
     ad.set_password(newpasswd) 
     ad.save() 
     url = (os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST' 
       ) else os.environ['SERVER_NAME']) 
     if users.get_current_user(): 
      senderemail = users.get_current_user().email() 
     elif url.endswith('.br'): 
      senderemail = '[email protected]' 
      translation.activate('pt-br') 
     else: 
      senderemail = '[email protected]' 
     message = mail.EmailMessage(sender=senderemail, 
       subject=_('Password reset successful')) 
     if ad.user: 
      message.to = ad.user.email() 
     else: 
      message.to = ad.email 
     to = message.to 
     output = \ 
      _("You're receiving this e-mail because you requested a password reset" 
      ) + ' ' + _('Your new password is: %(new_password)s') \ 
      % {'new_password': newpasswd} 
     msg = output 
     if isinstance(msg, unicode): 
      msg = msg.encode('utf-8') 
     message.body = '%s %s/%d' % (msg, url, ad.key().id()) 
     message.send() 
     self.response.out.write(_("We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly." 
           )) 
    else: 
     self.response.out.write('unknown email ') 

あなたは、私は、コードを動作させるために変更すべきかを教えてもらえますか?以前は動作していましたが、現在は翻訳がロードされる方法を変更しました。他のページや関数も動作します。それはあなたの翻訳のメカニズムのように見えます

おかげ

答えて

4

「_」は、翻訳値のプロキシを返しています。しかし、message.send()は型をチェックしていて、文字列が必要です。この変更をお試しください:

変更この:

message = mail.EmailMessage(sender=senderemail, 
     subject=_('Password reset successful')) 

へ:これは本当の文字列を咳やmessage.sendを作るためにあなたのプロキシを強制すべきである

message = mail.EmailMessage(sender=senderemail, 
     subject=unicode(_('Password reset successful'))) 

()幸せ。

+0

これは機能します。どうもありがとう。 –

関連する問題