2017-11-08 5 views

答えて

0

[OK]を誰もがこれを発見し、私は最初のアプリ などを作成することによって、それを行うために管理同じことを行う必要がある場合URL Overode "ジャンゴ・セロリ-REG"

はそうのように "/登録" します

url(r'^register/$', CeleryRegistrationView.as_view(), name='registration_register'), 

その後で

(デフォルトのバックエンドDJ-REG-Reduxの内のビューにRegistrationViewを探してください) 'views.py'は、registration_profile変数をオーバーライドします。

class CeleryRegistrationView(RegistrationView): 

    registration_profile = CeleryRegistrationProfile 

ここで、 'models.py'サブクラスのRegistrationProfileに次のものを追加します。セミコロンで必要とされる可能性の低い「要求」引数を削除し、シリアル化することはできません。サイトオブジェクトを文字列に変換します(現在はシリアライズ可能です)。

if send_email: 
     registration_profile.send_activation_email(site) 

if send_email: 
     registration_profile.celery_send_activation_email(site) 

原 'send_activation_email' メソッドの元のバルク

に(今、このコード、オーバーライドおよび変更 'create_inactive_user' メソッド上記新しいモデルマネージャで

class RegistrationProfile(RegistrationProfile): 

    objects = CeleryRegistrationManager() 

    def celery_send_activation_email(self, site): 
     site = site.__str__() 
     id=self.id 
     celery_task_send_activation_email.delay(id, site) 

'celery_task_send_activation_email')が 'tasks.py'に入ります 'send_activation_email'を無効にして、 '@shared_task'デコレータを使用してください。 '要求'引数を削除し、必要でないときはメソッド全体で削除します。再びオブジェクトがシリアライズできないので、 'self'引数を 'id'に変更してください。 IDに登録オブジェクトとメソッド

`@shared_task 

def celery_task_send_activation_email(id, site):

user = RegistrationProfile.objects.get(id=id) 
    activation_email_subject = getattr(settings, 
    'ACTIVATION_EMAIL_SUBJECT', 

    'registration/activation_email_subject.txt') 
    activation_email_body = getattr(settings, 'ACTIVATION_EMAIL_BODY', 
           'registration/activation_email.txt') 
    activation_email_html = getattr(settings, 'ACTIVATION_EMAIL_HTML', 
           'registration/activation_email.html') 

    ctx_dict = { 
     'user': user.id, 
     'activation_key': user.activation_key, 
     'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 
    } 
    subject = (getattr(settings, 'REGISTRATION_EMAIL_SUBJECT_PREFIX', '') + 
      render_to_string(
       activation_email_subject, ctx_dict)) 
    # Email subject *must not* contain newlines 
    subject = ''.join(subject.splitlines()) 
    from_email = get_from_email(site) 
    message_txt = render_to_string(activation_email_body, 
           ctx_dict) 

    email_message = EmailMultiAlternatives(subject, message_txt, 
             from_email, [user.user.email]) 

    if getattr(settings, 'REGISTRATION_EMAIL_HTML', True): 
     try: 
      message_html = render_to_string(
      activation_email_html, ctx_dict) 
     except TemplateDoesNotExist: 
      pass 
     else: 
      email_message.attach_alternative(message_html, 'text/html') 
email_message.send() 
全体の変化 'self.user' をつかみます
関連する問題