Adding users and administrator to blog project


신규 사용자 등록


  • /register 경로로 이동해서 블로그 웹 사이트에 등록할 수 있도록 한다.

2


  • forms.py에 RegisterForm이라는 WTForm을 만들고 부트스트랩을 사용해 wtf quick_form을 렌더링 해야 함

1


  • 사용자가 입력한 데이터를 사용하여 User테이블의 blog.db에 새 항목이 만들어져야 함

3



등록된 사용자 로그인


  • 성공적으로 등록이 완료된 사용자는 login 경로로 이동하여 자신의 크리덴셜을 사용하여 로그인할 수 있어야 함

4


5


  • 사용자 등록이 성공적으로 완료된 경우 로그인 상태로 메인페이지 연결
  • 이미 존재하는 이메일로 등록시 플래시 메시지


html 공통 flash message code



{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
{% endwith %}



6


  • 존재하지 않는 메일이거나 비번이 틀렸을 경우

7


  • 로그인 여부에 따라 네비게이션 바 표시 변경

9


8



경로보호

⇨ 관리자만 ‘새 게시물 생성’, ‘수정’, ‘삭제’ 버튼이 보이게

⇨ 사용자가 직접 라우트를 써서 액세스할 수 없게 보호


  • admin-only decoretor 생성

12


  • add_new_post, edit_post, delete_post에 데코레이터 붙여주기



🛠️ Fix error

10


  • 원인은 add_new_post 및 edit_post 함수에서 BlogPost 객체를 생성하거나 수정할 때, author 필드에 current_user 객체가 직접 할당되었기 때문.
    author 필드는 문자열 타입으로 정의되어 있지만, current_user는 Flask-Login의 사용자 인스턴스를 나타내는 LocalProxy 객체이다.
    이를 해결하기 위해 author 필드에는 current_user의 특정 속성 (예: 사용자 이름)을 할당해야 함


11



관계형 데이터베이스 만들기

User테이블과 BlogPost테이블 간의 관계를 생성하고 연결

⇨ SQLite, MySQL 혹은 Postgresql등의 관계형 데이터베이스에서는ForeignKey메서드와 relationalship()메서드를 사용해 테이블간 관계를 정의할 수 있다.


  • 데이터베이스에 새로운 컬럼이 추가되므로 기존 db 완전 삭제하고 재생성
  • ForeignKey메서드와 relationalship()메서드를 사용

13



모든 사용자가 블로그 게시물에 댓글을 추가할 수 있도록 하기


14


15


16



  • 게시물에 댓글을 작성할 수 있는 새로운 테이블 생성
  • 부모에 해당하는 테이블들과 Comment테이블간에 일대다 관계를 설정

17


  • /post/ 라우트 업데이트

18


  • 모든 댓글 출력

20


19



file name : day-69-blog-with-users-start