[Django] 비 SPA 방식으로 장고 Forms/Views를 적극 활용한 인스타그램 St 만들기#3_회원가입 환영 이메일 보내기

아직·2022년 7월 11일
0
post-thumbnail

1)

class User(AbstractUser):
    website_url = models.URLField(blank=True)
    bio = models.TextField(blank=True)

    def send_welcome_email(self):
        pass
+
def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid(): 
            signed_user = form.save()
            messages.success(request, "회원가입 환영합니다.")
            signed_user.send_welcome_email()

send_email을 보내는 시점과 방법과 관련해서, views.py에서 signup 이후 회원가입 환영 메세지를 띄우는 부분에 작성하거나, models.py에서 User 클래스 아래에 self.pk == None 조건의 save 함수를 정의해서 보내거나, 장고의 post_save 시그널?을 사용할 수 있다.

이번 강의에서는 models.py에 함수를 정의해주고 views.py에서 form이 저장되는 것을 signed_user로 정의한 다음, signed_user가 send_welcome_email을 호출하는 방법을 택했다.

다만 syncrous하게 동작하기 때문에 smtp 응답이 늦는 만큼 messages.succes 역시 지연될 것이다. 그래서 이 부분을 비동기 혹은 Celery로 처리하는 것을 추천한다고 하신다.

2)

render_to_string("accounts/welcome_email_subject.txt", {
            "user": self,
        })
+
return render(request, 'accounts/signup_form.html', {
        'form': form,

views.py에서는 render 시에 request를 첫 번째 인자로 받았지만, render_to_string에서는 주소를 바로 받는다.

여기서는 txt 파일에서 {{ user }}를 사용해서 context 값에 "user": self를 지정해줬다.

3)

from accounts.models import User
+
from django.contrib.auth import get_user_model

user model은 프로젝트에 따라 customized될 가능성이 높다. 전자는 장고 built-in 모델을 활용하는 반면, 후자는 settings의 AUTH_USER_MODEL을 참조해서 현재 활성화된 모델을 참조하기 좋은 방법이다.

4)

SendGrid 가입 승인을 못 받아서 views.py의 signed_user.send.welcome_email() 부분을 주석 처리하고 넘어감.

0개의 댓글