2017-11-08 1 views

답변

0

좋아, 사람이를 발견하고 처음 예를 들어, 응용 프로그램을 작성하여 내가 그것을 할 관리 동일 할 필요가있는 경우 URL을 Overode "장고 - 셀러리 - 등록"

은과 같이 "/ 등록"합니다 :

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'로 변경하십시오. 방법

`@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'로 등록 오브젝트를 잡아
관련 문제