본문 바로가기

Back-end

(37)
34. 마크다운 에디터 서버 측 작업pip markdown 설치하기장고 템플릿에서 마크다운 문법을 사용하기 위해 pip에서 마크다운 모듈을 설치해야 합니다.(.venv) C:\Users\***\PycharmProjects\forum-with-django>pip install markdown장고 커스텀 템플릿 필터 생성하기설치한 마크다운 모듈을 템플릿에서 사용하기 위해 필터를 생성해 봅시다.forum_filter.pyimport markdownfrom django import template# 이전에 배웠던 장고 자동 이스케이프 기능에게 안전한 문자열이라는 것을 알려주는 메서드입니다.from django.utils.safestring import mark_safe# 커스텀 필터/태그를 등록할 템플릿 라이브러니 인스턴스를 생성합니..
33. 조회수 서버 측 작업모델 생성class Post(models.Model): ... view_count = models.IntegerField(default=0, db_index=True) # db_index 속성을 사용하여 해당 필드에 DB 인덱스를 생성하여 검색/정렬을 빠르게 해줍니다. # WHERE, ORDER BY, JOIN 조건을 사용할 때 유용합니다. # 필터링/정렬 (is_public, view_count.order_by)시 유용하게 사용할 수 있습니다.마이그레이션을 진행해 줍니다.(.venv) C:\Users\***\PycharmProjects\forum-with-django>python manage.py makemigrations Migrations for 'forum..
32. __init__과 super() 이전 차시에서 우리는 회원탈퇴 시 사용자에게 비밀번호를 입력하게 하는 안전장치를 만들었습니다.그때 사용했던 __init__, super메서드에 대해 알아봅시다.사용했던 예제 코드class DeleteReasonForm(forms.ModelForm): password = forms.CharField(label="비밀번호 확인", widget=forms.PasswordInput) class Meta: ... def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user def clean(self): cleaned_data = supe..
31. 회원 탈퇴 서버 측 작업회원탈퇴 뷰는 구현이 간단하기 때문에 auth_view에 작성되어 있지 않습니다. 직접 구현해 봅시다.member/models.py먼저 회원 탈퇴 시 이유를 묻고 그 데이터를 저장하는 모델을 생성해 봅시다.from django.contrib.auth.models import AbstractUserfrom django.db import modelsclass ForumUser(AbstractUser): nickname = models.CharField(max_length=10)# 아래처럼 각 필드를 생성하거나 하나의 charField에 ','join 연산을 통해 통째로 집어 넣어도 됩니다.# 다만 DB 쿼리 요청 만으로 간편하게 데이터를 확인할 수 있도록 각자의 필드를 생성하였습니다.cla..
30. 프로필 페이지 서버 측 작업urls.pyurlpatterns = [ path('login/', views.custom_login, name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), path('signup/', views.signup, name='signup'), path('profile//', views.profile, name='profile'), ...]member/views.pydef profile(request, user_p..
29. 비밀번호 변경 기본 제공 템플릿 사용먼저 장고에서 기본으로 제공되는 비밀번호 변경 템플릿을 사용해본 뒤, 커스텀 템플릿을 작성해 봅시다.member/urls.pyfrom django.contrib.auth import views as auth_viewsfrom django.urls import path, reverse_lazyfrom member import viewsapp_name = 'member'urlpatterns = [ # login logout signin # password-reset path('password-change/', auth_views.PasswordChangeView.as_view(), name='password_change'), path('..
28. SMTP, django-environ SMTPSimple Mail Transfer Protocol은 인터넷에서 이메일을 전송하기 위한 표준 프로토콜 입니다.이메일을 보내는 쪽(클라이언트 or 메일 서버)과 받는 쪽(상대 메일 서버)사이에서 메세지를 전송하는 규칙을 정의하며, 외부 메일 시스템 간 교환이 가능하게 해줍니다.기본 역할이메일을 전송하는 기능을 담당합니다. 송신에만 집중하며 수신과 저장에는 POP3/IMAP 등 추가 프로토콜이 담당합니다.동작 방식사용자가 이메일 클라이언트에서 메일을 작성하면 메일 서버로 전달되고, 메일 서버는 SMTP를 통해 목적지 서버로 메일을 전송합니다.최종적으로 POP3/IMAP 프로토콜을 통해 메일을 읽을 수 있습니다.Gmail SMTP 설정하기여러 웹메일 서비스들이 있지만 Gmail을 이용하여 SMTP 비..
27. 비밀번호 초기화 Django Password Reset View 사용해 보기member/urls.pyDjango의 auth_views는 비밀번호 초기화에 대한 기본 클래스뷰를 제공합니다. 사용해 봅시다.from django.contrib.auth import views as auth_viewsfrom django.urls import pathfrom member import viewsapp_name = 'member'urlpatterns = [ path('login/', views.custom_login, name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), path('signup/', vi..
26. 게시물 검색 서버 측 작업base_views.pydef post_list(request): posts = ( Post.objects .select_related('author') .annotate(voted_users_count=Count('voted_users')) .order_by('-created_date') ) request_page = request.GET.get('page', 1) # 검색, 페이징의 경우 GET 요청의 쿼리 파라미터에 정보를 담아 요청합니다. search_keyword = request.GET.get('search_keyword', '') # 만약 사용자가 검색을 요청했다면: if search_keyw..
25. 추천 (비동기 요청) + N+1 쿼리 문제 참고 문헌: 점프 투 장고 / 3-11 추천 3-11 추천* `[완성 소스]` : [github.com/pahkey/jump2django/tree/3-11](https://github.com/pahkey/jump2django/tree/…wikidocs.net 1. 추천 수 응답 (서버 측 작업)forum/models.pyfrom django.contrib.auth.models import Userfrom django.db import modelsfrom django.utils import timezonefrom member.models import ForumUserclass Post(models.Model): author = models.ForeignKey(ForumUser, on_delete=mo..