현제의 현재이야기

[OSOD] 구독 이메일 관련 본문

DRF/OSOD

[OSOD] 구독 이메일 관련

현재의 현제 2023. 2. 19. 08:44
class ContactView(APIView):
    permission_classes = [AllowAny]

    def get(self, request):
        sub_users = User.objects.filter(subscription=True)
        sub_unknowns = Subsription.objects.all()

        today = datetime.now().date()
        target_sentence = Sentence.objects.get(
                                created_at__year=today.year,
                                created_at__month=today.month,
                                created_at__day=today.day,
                                )

        sub_users_list = [sub_user.email for sub_user in sub_users]
        sub_unknowns_list = [sub_unknown.sub_email for sub_unknown in sub_unknowns]
        send_list = sub_users_list + sub_unknowns_list
        send_list = set(send_list)
        send_list = list(send_list)

        context = {
            'created_at': target_sentence.created_at,
            "day_of_the_week": get_day_of_the_week(target_sentence.created_at),
            'sentence': target_sentence.sentence,
            'discription': target_sentence.discription,
            'translate': target_sentence.translate,
        }

        message = render_to_string('email_template.html', context)
        subject = f"[OSOD] {get_day_of_the_week(target_sentence.created_at)}의 영작"
        to = send_list
        send_mail(
            subject = subject,
            message = "",
            from_email = None,
            recipient_list = to,
            html_message = message
        )
        return Response(status.HTTP_201_CREATED)
  • 구독 이메일을 보내는 view이다. 우선 User중에서 subscription 필드가 True인 사람들과 비로그인으로 구독 이메일을 기입한 사람들을 불러온 뒤, 하나로 합치고 set으로 바꿔주어 중복을 없애주었다.
  • 그리고 오늘 구문을 불러낸다
  • context 딕셔너리에 templates에 맞는 변수명으로 구문의 필드를 매칭시켜주고
  • render_to_string으로 templatese에 context를 넣어준다.
  • send_mail을 통해서 메일을 보내는데 여기서 templates는 html파일임으로, html_message로 보내야 정상적으로 html을 나타낸다. 

  •  ㅋㅋㅋ 이렇게 출력된다 신기방기
Comments