Skip to content

su2minig/Django-blog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 

Repository files navigation

Django-blog

목차

기획

🔖플레이하는 게임의 공략, 플레이 영상 글을 기록할 블로그🔖

WBS

2023.10.25 ~ 2023.11.07

wbs

요구사항 분석

기본 요구사항

  • 모놀리식
  • 데이터베이스 구조 설계

0단계: Django Admin을 이용한 게시글 읽기 및 메인페이지 구현하기

요구사항

  1. 메인 페이지 구현 - [O]

    • 페이지 제목과 블로그 입장하기 버튼이 있습니다.
  2. Django admin을 이용하여 게시글 작성 - [O]

    • 게시글은 제목, 내용으로 구성되어 있습니다.
  3. 작성되어 있는 게시글 목록을 열람. - [O]

    • 게시글들의 제목을 확인 할 수 있습니다.
  4. 작성 되어있는 게시글 상세 페이지를 열람. - [O]

    • 게시글의 제목/내용을 보는 기능입니다.

1단계: 블로그 CRUD 기능 구현하기

요구사항

  1. 게시글 작성 기능 구현 - [O]

    • 로그인이 되지 않더라도 글 작성이 가능합니다.
    • 게시글 제목과 내용을 작성 할 수 있는 페이지
    • 작성한 게시글이 저장되어 게시글 목록에 표시
    • 태그를 지정할 수 있다
  2. 게시글 수정 기능 구현 - [O]

    • 게시글의 제목 또는 내용을 수정 가능

    • 게시글 제목과 내용을 수정 할 수 있는 페이지

    • 수정된 내용은 게시글 목록보기/상세보기에 반영

  3. 게시글 삭제 기능 구현 - [O]

    • 게시글을 삭제하는 기능

    • 삭제를 완료한 이후에 게시판으로 이동

    • 삭제된 게시글은 게시글 목록보기/상세보기에서 표시 안함

  4. 게시글 검색 기능 구현 - [O]

    • 게시글 제목, 내용, 태그에 따라 검색가능

    • 검색한 게시물은 시간순에 따라 정렬이 가능해야 합니다

2단계: 로그인/회원가입 기능을 이용하여 블로그 구현하기

요구사항

  1. 메인페이지 구현 - [O]

    • 회원가입/로그인 버튼

    • 회원가입 버튼을 클릭하면 회원가입 페이지로 이동

    • 로그인 버튼을 클릭하면 로그인 페이지로 이동

  2. 회원가입 기능 구현 - [O]

    • 회원가입을 할 수 있는 페이지

    • 입력받는 값은 id, password, nickname, email, profile_image

  3. 로그인 기능 구현 - [O]

    • 로그인을 할 수 있는 페이지

    • 입력받는 값은 id, password

  4. 게시글 작성 기능 구현 - [O]

    • 로그인을 한 유저만 해당 기능을 사용 가능
  5. 게시글 목록 기능 구현 - [O]

    • 모든 사용자들이 게시한 블로그 게시글들의 제목과 작성자, 작성자프로필사진 확인가능
  6. 게시글 수정 기능 구현 - [O]

    • 로그인을 한 유저만 해당 기능을 사용 가능

    • 본인의 게시글이 아니라면 수정이 불가

  7. 게시글 삭제 기능 구현 - [O]

    • 로그인을 한 유저만 해당 기능을 사용 가능

    • 본인의 게시글이 아니라면 삭제가 불가

3단계: 블로그 기능 외 추가 기능 작성 및 배포

요구사항

  1. 게시글 작성 기능 구현 - [O]

    • 사진 업로드

    • 게시글 조회수 카운트

  2. 회원 관련 추가 기능 - [O]

    • 프로필 수정(nickname, profile_image, password 변경가능)

    • 닉네임 추가

    • 회원탈퇴

  3. 댓글 기능 - [O]

    • 댓글 추가

    • 댓글 삭제

    • 대댓글

  4. 정적파일 모으기 - [O]

마인드맵

mindmap

명세표

명세표

개발환경

  • 💻 기술스택:

프로젝트 구조

📦blog
 ┣ 📂accounts
 ┃ ┣ 📂migrations
 ┃ ┣ 📂__pycache__
 ┃ ┣ 📜admin.py
 ┃ ┣ 📜apps.py
 ┃ ┣ 📜forms.py
 ┃ ┣ 📜models.py
 ┃ ┣ 📜tests.py
 ┃ ┣ 📜urls.py
 ┃ ┣ 📜views.py
 ┃ ┗ 📜__init__.py
 ┣ 📂all_static
 ┣ 📂blog
 ┃ ┣ 📂migrations
 ┃ ┣ 📂__pycache__
 ┃ ┣ 📜admin.py
 ┃ ┣ 📜apps.py
 ┃ ┣ 📜forms.py
 ┃ ┣ 📜models.py
 ┃ ┣ 📜tests.py
 ┃ ┣ 📜urls.py
 ┃ ┣ 📜views.py
 ┃ ┗ 📜__init__.py
 ┣ 📂main
 ┃ ┣ 📂migrations
 ┃ ┣ 📂__pycache__
 ┃ ┣ 📜admin.py
 ┃ ┣ 📜apps.py
 ┃ ┣ 📜models.py
 ┃ ┣ 📜tests.py
 ┃ ┣ 📜urls.py
 ┃ ┣ 📜views.py
 ┃ ┗ 📜__init__.py
 ┣ 📂makeblog
 ┃ ┣ 📂__pycache__
 ┃ ┣ 📜asgi.py
 ┃ ┣ 📜settings.py
 ┃ ┣ 📜urls.py
 ┃ ┣ 📜wsgi.py
 ┃ ┗ 📜__init__.py
 ┣ 📂media
 ┃ ┣ 📂accounts
 ┃ ┗ 📂blog
 ┣ 📂static
 ┃ ┣ 📂assets
 ┃ ┃ ┗ 📜favicon.ico
 ┃ ┗ 📂blog
 ┃ ┃ ┗ 📜main.css
 ┣ 📂templates
 ┃ ┣ 📂accounts
 ┃ ┃ ┣ 📜base.html
 ┃ ┃ ┣ 📜base2.html
 ┃ ┃ ┣ 📜form.html
 ┃ ┃ ┣ 📜login.html
 ┃ ┃ ┣ 📜profile.html
 ┃ ┃ ┣ 📜update.html
 ┃ ┃ ┗ 📜user_confirm_delete.html
 ┃ ┣ 📂blog
 ┃ ┃ ┣ 📜blog.html
 ┃ ┃ ┣ 📜post.html
 ┃ ┃ ┣ 📜post_confirm_delete.html
 ┃ ┃ ┗ 📜post_form.html
 ┃ ┣ 📂main
 ┃ ┃ ┗ 📜main.html
 ┃ ┗ 📜404.html
 ┣ 📜db.sqlite3
 ┗ 📜manage.py

ERD

erd

UI

메인페이지

메인페이지

메인페이지(비로그인)

  • 메인페이지화면으로 로그인시에는 상단에 메인페이지로 이동하는 home과 로그아웃이 있고 바로가기를 통해서 게시판과 프로필로 이동가능합니다.
  • 비로그인시에는 상단에 로그아웃버튼대신 로그인버튼과 회원가입버튼이 있고 바로가기에는 게시판만 이동가능합니다.

게시판

게시판페이지

게시판페이지(비로그인)

게시판검색

게시판 페이지이동gif

  • 게시판페이지의 경우 비로그인자도 글목록과 게시물을 볼 수 있지만 게시물 작성은 불가합니다.
  • 검색창에 단어를 검색할경우 게시물의 제목과 내용 태그에 해당 단어가 포함된 게시물 목록을 보여줍니다.
  • 게시물 5개를 기준으로 페이지가 나뉘며 화살표를 통하여 페이지 이동이 가능합니다(현재 페이지는 빨간색으로표시).

게시물

게시물 상세

게시물상세비로그인

  • 게시물의 제목,작성자,작성날짜,내용,태그,댓글을 확인가능합니다.
  • 해당 게시물 작성자를 제외한 유저는 게시물 수정버튼과 삭제 버튼이 없습니다.

게시물 작성

게시물작성(비로그인)gif

게시물작성gif

입력란

  • 비로그인자가 이용시 로그인페이지로 이동됩니다.
  • 로그인이 되어있으면 작성폼 페이지로 이동합니다.
  • 제목,내용은 필수로 작성해야하며 작성한 뒤 저장을 누르면 작성이 완료됩니다(제목,내용 입력안하고 저장 시 해당칸 작성을 요구합니다).
  • 작성완료 시 게시판으로 이동합니다.

게시물 수정

게시물삭제(비로그인)

게시물수정gif

  • 게시물 수정은 해당 게시물의 작성자일 경우에만 수정버튼이 보이며 클릭 시 수정페이지로 이동하여 기존 게시물의 내용의 변경이 가능합니다.

게시물 삭제

게시물삭제(비로그인)

게시물삭제

  • 해당 게시물의 작성자일 경우에만 삭제버튼이 보이며 삭제버튼 클릭 시 삭제확인페이지로 이동하여 확인 시 게시물이 삭제된다.

댓글

댓글 답글작성git

댓글 답글수정및삭제gif

  • 게시물에는 댓글을 달 수 있습니다.
  • 로그인을 하지 않은 유저가 사용시 로그인페이지로 이동됩니다.
  • 게시물에 달린 댓글에 답글을 할 수 있습니다.
  • 삭제 버튼 사용 시 댓글을 삭제할 수 있습니다.
  • 수정 버튼 사용 시 수정폼이 나오며 댓글의 내용을 수정할 수 있습니다.

프로필

프로필페이지

  • 로그인한 유저의 프로필 페이지입니다.
  • 해당 유저의 프로필사진 이메일 닉네임을 보여줍니다.
  • 바로가기를 통해서 게시판, 프로필수정, 회원탈퇴페이지로 이동이 가능합니다.

프로필 수정

프로필수정페이지

불일치

  • 유저의 별명,프로필이미지, 비밀번호의 변경이 가능합니다.
  • 비밀번호와 비밀번호 확인의 값이 다를경우 비밀번호 불일치를 알려주고 재입력을 요구합니다.

회원탈퇴

회원탈퇴gif

회원탈퇴취소gif

  • 회원탈퇴 클릭 시 탈퇴여부를 재확인합니다.
  • '네'를 클릭 시 유저의 정보를 삭제후 로그아웃됩니다.
  • '취소'를 클릭 시 다시 프로필로 이동합니다.

겪은 오류들과 해결법

  • 게시물 댓글 작성기능 구현 중 발생한 405 에러

    • 발생 원인 :

      Request URL 을 잘못 입력하여 매칭 안된 경우 또는 HTTP 메서드 (GET/POST/PUT/...) 가 잘못 매칭된 경우 생긴다고한다. 이번 경우에는 작성 formactionurl을 지정 안한 것을 발견했고 url을 작성해주니 제대로 댓글이 작성되었습니다.

  • no such column 에러

    • recomment 모델을 작성하고서 migrate를 하지 않은 탓에 DB에 테이블이 반영이 안되어 발생하게되었습니다.
      python manage.py makemigrations
      python manage.py migrate
      
      로 DB에 테이블을 반영한 후 해결되었습니다.
  • crispy form을 사용 중 TemplateDoesNotExist: bootstrap4/uni_form.html 에러 발생

    • 발생원인: django-crispy-forms 2.0부터 템플릿 팩은 이제 별도의 패키지에 있다고한다.

    • 해결방법: 버전 2.0부터 Crispy-bootstrap4pip install한후 INSTALLED_APPS에 "crispy_bootstrap4"를 추가하고 CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4" 템플릿팩 허용을 추가해주었다.

  • 댓글 수정 삭제 시 404에러 발생

    • 발생 원인: shell에 들어가 각각 상속한 deleteviewupdateview을 dir로 확인해보니 pk_url_kwarg를 보고 찾아보니 전달되는 pk값이 post의 pk와 comment comment_pk 이 두개의 pk값이 전달되었는데 pk_url_kwargpost의 pk값인 pk가 들어가서 댓글의 쿼리값을 찾지못해 발생한 것이였다.

    • 해결방법:

      class ReCommentDeleteView(UserPassesTestMixin, DeleteView):
          model = ReComment
          pk_url_kwarg = 'recomment_pk'
      

    값을 설정을 해주니 해결되었습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published