-
1. 커뮤니티 활성화 및 소통
- 반려동물 애호가들이 활발하게 소통할 수 있는 온라인 커뮤니티를 구축하여, 사용자들이 자신의 경험을 나누고 서로의 질문에 답하며 유대감을 형성할 수 있도록 지원합니다.
-
2. 반려동물 관련 정보 교류 및 교육
- 반려동물의 건강, 훈련, 영양 등 다양한 주제에 대한 유용하고 신뢰할 수 있는 정보를 제공하여, 사용자가 지식을 쌓고 올바른 돌봄 방법을 배울 수 있도록 합니다. 이를 통해 반려동물의 복지를 향상시키는 데 기여합니다.
-
3. 이벤트 및 활동 지원
- 반려동물 관련 다양한 온라인 및 오프라인 이벤트를 기획하고 지원하여, 커뮤니티의 참여를 유도하고, 사용자들이 더욱 활발히 활동할 수 있는 기회를 제공합니다. 이를 통해 커뮤니티의 활성화를 도모합니다.
-
4. 전문가, 기업과의 연계
- 수의사, 훈련사, 관련 기업 등과 협력하여 신뢰할 수 있는 전문적인 정보를 제공하고, 사용자들이 전문가와 직접 소통할 수 있는 기회를 마련합니다. 이를 통해 커뮤니티의 신뢰성을 높이고, 사용자들에게 유익한 자원을 제공합니다.
-
1. 메인페이지
- 페이지 제목과 블로그 입장하기 버튼이 있습니다.
- 회원가입/로그인 버튼이 있습니다.
- 회원가입 버튼을 클릭하면 회원가입 페이지로 이동합니다.
- 로그인 버튼을 클릭하면 로그인 페이지로 이동합니다.
-
2. 회원가입
- 회원가입을 할 수 있는 페이지가 있습니다.
- 입력받는 값은 id(email), password입니다.
-
3. 로그인
- 로그인을 할 수 있는 페이지가 있습니다.
- 입력받는 값은 id(email), password입니다.
-
4. 회원 프로필
- 프로필 및 프로필 이미지 수정, 비밀번호 변경이 가능합니다.
- 닉네임이 있으며, 블로그 활동은 닉네임으로 하게 됩니다.
-
5. 게시글 작성
- 로그인을 한 유저만 해당 기능을 사용 할 수 있습니다.
- 게시글 제목과 내용을 작성 할 수 있는 페이지가 있습니다.
- 작성한 게시글이 저장되어 게시글 목록에 보입니다.
- 사진 업로드가 가능합니다.
- 게시글 조회수 기능이 있습니다.
-
6. 게시글 목록
- 모든 사용자들이(로그인을 하지 않은 사용자 포함) 게시한 블로그 게시글들의 제목을 확인 할 수 있습니다.
- 저자, 카테고리, 태그, 조회수를 볼 수 있습니다.
- 작성 시간에 따라 정렬되며, 최신 글이 가장 먼저 보이게 되어 있습니다.
-
7. 게시글 상세보기
- 게시글의 제목/내용을 보는 기능입니다.
- 게시글의 카테고리, 태그, 조회수, 저자(닉네임)을 볼 수 있습니다.
-
8. 게시글 수정
- 로그인을 한 유저만 해당 기능을 사용 할 수 있습니다.
- 본인의 게시글이 아니라면 수정이 불가능합니다.
- 게시글의 제목 또는 내용을 수정 하는 기능입니다.
- 게시글 제목과 내용을 수정 할 수 있는 페이지가 있습니다.
- 수정된 내용은 게시글 목록보기/상세보기에 반영됩니다.
-
9. 게시글 삭제
- 로그인을 한 유저만 해당 기능을 사용 할 수 있습니다.
- 본인의 게시글이 아니라면 수정이 불가능합니다.
- 게시글을 삭제하는 기능입니다.
- 삭제를 완료한 이후에 게시글 목록 화면으로 돌아갑니다.
- 삭제된 게시글은 게시글 목록보기/상세보기에서 접근이 불가능합니다.
-
10. 게시글 검색
- 제목과 내용을 사용자 쿼리로 검색할 수 있습니다.
- 특정한 카테고리, 태그를 선택하여 게시글을 찾아 볼 수 있습니다.
- 검색한 게시물은 시간순에 따라 정렬되어 있습니다.
운영 체제: Windows
Python 버전: Python 3.12.5
Django 버전: Django 5.1
IDE/코드 편집기: VS Code
가상 환경: venv (Python의 가상 환경 관리 도구)
버전 관리: GitHub
생성형 AI: ChatGPT, Claude
- Main 앱 URLs
URL 패턴 | View 이름 | 설명 |
---|---|---|
admin/ |
admin.site.urls | 관리자 페이지 |
'' |
include('posts.urls') | posts URL 포함 |
accounts/ |
include('accounts.urls') | accounts URL 포함 |
- Accounts 앱 URLs
URL 패턴 | View 이름 | 설명 |
---|---|---|
signup/ |
SignupView | 유저 회원가입 |
login/ |
CustomLoginView | 유저 로그인 |
logout/ |
CustomLogoutView | 유저 로그아웃 |
profile/ |
ProfileView | 유저 프로필 열람 |
profile/edit/ |
EditProfileView | 유저 프로필 수정 |
password/change/ |
ChangePasswordView | 유저 비밀번호 수정 |
- Posts App URLs
URL 패턴 | View 이름 | 설명 |
---|---|---|
'' |
home | Home page |
post/new/ |
PostCreateView | 새 게시글 생성(로그인 필요) |
post/<int:pk>/ |
PostDetailView | 특정 게시글 열람 |
post/<int:pk>/edit/ |
PostUpdateView | 게시글 수정(로그인 필요, 본인 글만 가능) |
post/<int:pk>/delete/ |
PostDeleteView | 게시글 삭제(로그인 필요, 본인 글만 가능) |
posts/ |
PostListView | 모든 게시글의 리스트 |
category/<slug:category_slug>/ |
CategoryPostsView | 카테고리별 게시글 리스트 |
tag/<slug:tag_slug>/ |
TagPostsView | 태그별 게시글 리스트 |
search/ |
SearchPostsView | 게시글 검색 |
📦project_root/
├── 📂accounts/
│ ├── 📜__pycache__/
│ ├── 📜migrations/
│ ├── 📜__init__.py
│ ├── 📜admin.py
│ ├── 📜apps.py
│ ├── 📜forms.py
│ ├── 📜models.py
│ ├── 📜tests.py
│ ├── 📜urls.py
│ └── 📜views.py
├── 📂media/
├── 📂posts/
│ ├── 📜__pycache__/
│ ├── 📜migrations/
│ ├── 📜__init__.py
│ ├── 📜admin.py
│ ├── 📜apps.py
│ ├── 📜forms.py
│ ├── 📜models.py
│ ├── 📜tests.py
│ ├── 📜urls.py
│ └── 📜views.py
├── 📂project/
│ ├── 📜__pycache__/
│ ├── 📜__init__.py
│ ├── 📜asgi.py
│ ├── 📜settings.py
│ ├── 📜urls.py
│ └── 📜wsgi.py
├── 📂static/
│ └── 📂images/
│ └── 📜default_profile_picture.png
├── 📂templates/
│ ├── 📂accounts/
│ │ ├── 📜change_password.html
│ │ ├── 📜edit_profile.html
│ │ ├── 📜logged_out.html
│ │ ├── 📜login.html
│ │ ├── 📜profile.html
│ │ └── 📜signup.html
│ ├── 📂posts/
│ │ ├── 📜post_confirm_delete.html
│ │ ├── 📜post_detail.html
│ │ ├── 📜post_form.html
│ │ └── 📜post_list.html
│ └── 📜base.html
├── 📜venv/
├── 📜.gitignore
├── 📜db.sqlite3
├── 📜manage.py
├── 📜README.md
└── 📜requirements.txt
gantt
title Django 블로그 프로젝트 WBS
dateFormat YYYY-MM-DD
axisFormat %m-%d
section 프로젝트 준비
프로젝트 기획 :2023-08-26, 1d
WBS 작성 :2023-08-26, 1d
기획서 초안 작성 :2023-08-27, 1d
section 데이터베이스 설계
ERD 작성 :2023-08-27, 1d
모델 설계 :2023-08-28, 1d
section 기본 구조 설계
URL 설계 :2023-08-28, 1d
프로젝트 셋업 :2023-08-28, 4h
기본 템플릿 구성 :2023-08-28, 4h
section 핵심 기능 구현
메인페이지 :2023-08-29, 4h
회원가입 기능 :2023-08-29, 4h
로그인/로그아웃 기능:2023-08-29, 4h
게시글 CRUD 기능 :2023-08-29, 1d
section 부가 기능 구현
댓글 기능 :2023-08-30, 6h
태그 및 카테고리 기능:2023-08-30, 6h
좋아요 및 북마크 기능:2023-08-30, 6h
알림 시스템 :2023-08-30, 6h
section 마무리
와이어프레임 작성 :2023-08-31, 4h
아키텍쳐 작성 :2023-08-31, 4h
테스트 및 디버깅 :2023-08-31, 4h
기획서 마무리 :2023-08-31, 2h
컬럼명 | 데이터 타입 | 제약 조건 | 설명 |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | 사용자 고유 ID (기본 제공 필드) |
nickname | VARCHAR(50) | UNIQUE, NOT NULL | 사용자 닉네임 |
UNIQUE, NOT NULL, INDEX | 사용자 이메일 | ||
profile_picture | VARCHAR(100) | NULL | 프로필 사진 (파일 경로) |
is_staff | BOOLEAN | DEFAULT FALSE | 관리자인지 여부 |
is_active | BOOLEAN | DEFAULT TRUE | 활성화 여부 |
is_superuser | BOOLEAN | DEFAULT FALSE | 슈퍼유저 여부 |
date_joined | DATETIME | DEFAULT CURRENT_TIMESTAMP | 가입일 |
컬럼명 | 데이터 타입 | 제약 조건 | 설명 |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | 게시물 고유 ID |
title | VARCHAR(200) | NOT NULL | 게시물 제목 |
content | TEXT | NOT NULL | 게시물 내용 |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 작성일 |
updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 마지막 수정일 |
author | INTEGER | FOREIGN KEY (AUTH_USER_MODEL) | 작성자 ID |
category | INTEGER | FOREIGN KEY (Category), NULL | 카테고리 ID |
tags | ARRAY/JSON | NULL | 태그 (Django-tagging 사용) |
image | VARCHAR(100) | NULL | 이미지 파일 경로 |
views | INTEGER | DEFAULT 0 | 조회수 |
컬럼명 | 데이터 타입 | 제약 조건 | 설명 |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | 카테고리 고유 ID |
name | VARCHAR(100) | UNIQUE, NOT NULL | 카테고리 이름 |
slug | VARCHAR(100) | UNIQUE, NOT NULL | URL 슬러그 |
erDiagram
User ||--o{ Post : writes
User ||--o{ Comment : makes
User ||--o{ Like : gives
User ||--o{ Bookmark : saves
User ||--o{ Notification : receives
Post ||--o{ Comment : has
Post ||--o{ Like : receives
Post ||--o{ Bookmark : has
Post }o--|| Category : belongs_to
Post }o--o{ Tag : has
User {
int id PK
string email
string nickname
boolean is_staff
boolean is_active
boolean is_superuser
datetime date_joined
image profile_picture
}
Post {
int id PK
string title
text content
datetime created_at
datetime updated_at
int author FK
int category FK
int views
}
Category {
int id PK
string name
string slug
}
Comment {
int id PK
text content
datetime created_at
datetime updated_at
int author FK
int post FK
int parent FK
}
Like {
int id PK
int user FK
int post FK
datetime created_at
}
Bookmark {
int id PK
int user FK
int post FK
datetime created_at
}
Notification {
int id PK
string notification_type
int recipient FK
int actor FK
string verb
int target FK
datetime created_at
boolean is_read
}
Tag {
int id PK
string name
string slug
}
- 로그아웃 페이지 405 에러
- base.html에서 따로 설정을 하지 않아 GET 방식 -> 에러
- POST 방식으로 변경
아직 Django를 다루는 데에 익숙하지 않고, 모르는 부분이 많아 프로젝트를 완수하지 못했습니다. 프로젝트는 주어진 기간 내에 끝내지 못하고, 기획단계에서 설계한 기능들을 전부 구현하지 못했습니다. 하지만 이번 프로젝트를 통해 Django에서 기능이 구현되는 과정과 원리를 세세하게 이해할 수 있게 되었고, 또 Django가 얼마나 효율적이며 구조가 매력적인 프로그램인지 다시 한번 깨닫게 되는 좋은 기회였습니다. 장고의 '마감기간에 쫓기는 자들을 위한 프레임워크' 문구를 새삼 직접 체험해보는 시간이였습니다.