-정보처리기사 실기공부에서 배운내용
SMTP - 로컬에서 이메일을 보내기위한 프로토콜, 기본포트번호는 25번
SSL/TLS - 클라이언트와 서버간의 웹데이터를 암호화해주고 무결성을 보장해주는 암호화프로토콜
0. settings.py 설정해준다
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'ID'
EMAIL_HOST_PASSWORD = 'PASSWORD'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
1. MVT패턴으로 코딩(모델은 여기서 생략)
1-1클라이언트 요청 view에서 form 필드 값을 is_valid()를 통한 유효성검사를 한다. 유효성검사를 통과한 cd 데이터는 f스트링으로 데이터와 문자열을 합쳐서 send_mail()안에 데이터+문자열을 넣어서 메일을 보낸다. 보낸데이터로는 게시글 제목,보낸사람,url링크, 댓글이 있다.
from django.core.mail import send_mail
def post_share(request, post_id):
# get_object_or_404(id를 조회하고 오류가 나면 404에러처리)
post = get_object_or_404(Post, id =post_id, status = Post.Status.PUBLISHED)
sent = False
if request.method == 'POST':
form = EmailPostForm(request.POST)
# 유효성검사
if form.is_valid():
# cd변수는 유효한 데이터
cd = form.cleaned_data
post_url = request.build_absolute_uri(
post.get_absolute_url()
)
subject = f"{cd['name']} 추천한당" \
f"{post.title}"
message = f"Read {post.title} at {post_url}\n\n" \
f"{cd['name']}\'s comments: {cd['comments']}"
send_mail(subject, message, 'your_id',[cd['to']])
sent = True
else:
form = EmailPostForm()
return render(request, 'blog/post/share.html', {'post':post,'form':form,'sent': sent})
1-2 사용자에게 보여줄 HTML 템플릿에서 이메일 보내는 페이지를 꾸며보았다. form태그 에서 POST요청을 할 때 CSRF공격을 방지하기 위해 form태크안에 {% csrf_token %}을 넣어주었다.
{% extends "blog/base.html" %}
{% block title %}글 공유{% endblock %}
{% block content %}
# 만약 성공하면 성공메시지를 출력해서 보여주고 유효성검사 실패하면 필드에 오류메시지가 뜬다.
{% if sent %}
<h1>이메일이 성공적으로 보내졌습니다</h1>
<p>"{{ post.title }}" 게시글이 성공적으로 보내짐 send to{{ form.cleaned_data.to }}</p>
{% else %}
<h1>"{{ post.title }}" 게시글 이메일로 공유하기</h1>
<form method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" value="Send e-mail">
</form>
{% endif %}
{% endblock %}
2.결과화면
2-1 게시글 페이지에 파란색으로 적혀진 게시글공유 링크 클릭
2-2 유효성 검사체크
2-3 이메일 전송완료
참고한 책입니다.
https://www.yes24.com/Product/Goods/125101496
'portfolio' 카테고리의 다른 글
Django + Postgresql (트라이그램 유사성을 이용하여 유사한단어 검색하기) (0) | 2024.05.08 |
---|---|
Django + Postgresql (ORM에서 searchVector를 이용하여 모델의 여러 필드검색), RSS feed 제작 (0) | 2024.05.08 |
Django 댓글 비활성화 (0) | 2024.05.08 |
FASTAPI OAUTH2.0 인증, 인코딩 디코딩을 통한 JWT 생성과 검증, 리프레시 토큰 생성 (0) | 2024.03.25 |
FASTAPI 정적 토큰헤더를 통한 인증 (0) | 2024.03.15 |