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() 부분을 주석 처리하고 넘어감.