소셜 네트워킹 서비스(sns) API
Django Rest Framework 를 이용한 REST API 서버로
- 유저 회원가입, 로그인(토큰 인증 방식) 기능
- 게시글 생성, 수정, 삭제, 조회 기능
- 좋아요
위 기능을 제공합니다.
- 2022/09/29~2022/10/03 (3일)
✅ 게시글 기능 : 로그인한 유저만 접근 가능합니다.
- 모델링 : django의
AbstractBaseUser
를 상속 받아 이메일을 id로 하는 User 모델 구현
simplejwt
를 이용하여 토큰 인증 방식 로그인 구현
- 게시글 생성시
- 제목(title), 내용(content), 태그(tags) 필요
- 태그는 '#태그' 형식이며 여러 개인 경우 '#태그1,#태그2' 와 같이 ','로 구분
- 게시글 수정시
- 제목(title), 내용(content), 태그(tags) 필요
-
게시글 전체 조회시
- 기본 정렬: 최신순(생성일자 기준)
- 정렬은 조회수(
views
), 좋아요 수(likes
), 생성 일자(created_at
) 기준으로 가능하며 오름차순, 내림차순 가능url/?ordering=-views
=> 내림차순인 경우 필드명 앞에 '-' - 검색이 가능하며 제목을 기준으로 검색 가능
url/?search=검색어
- 태그 필터링이 가능하며 여러 개인 경우 ','로 구분하고 해당 태그를 모두 포함한 게시글만 필터링
url/?tags=태그1,태그2
- 페이지 사이즈 지정 가능하며 페이지에 표현할 글의 최대 개수는 30개 기본은 10개
url/?page_size=20
-
게시글 상세 조회시
- 날짜, 유저에 상관 없이 조회시 조회수 1 증가
is_deleted
필드를 이용하여 soft delete 방식으로 구현- 삭제 게시글 복구 가능
- 유저는 한 게시글에 한번 좋아요를 할 수 있으며 좋아요가 되어있는 경우 다시 요청시 좋아요 취소
- 테스트 코드 구현 예정
rest_framework
의APITestCase
이용
버전 | 기능 | 세부 기능 | 설명 | 상태 |
---|---|---|---|---|
v1 | 유저 | 회원가입 | 회원가입 | ✅ |
- | - | 로그인 | jwt를 이용한 로그인 | ✅ |
- | 게시글 | 생성 | 게시글 생성 | ✅ |
- | - | 조회 | 게시글 조회 | ✅ |
- | - | 수정 | 게시글 수정 | ✅ |
- | - | 삭제 | 게시글 삭제(soft-delete) | ✅ |
- | - | 조회 | 조회시 필터링, 페이지네이션, 정렬, 검색 기능 | ✅ |
- | - | 좋아요 | 게시글 좋아요 기능 | ✅ |
- | 테스트 | 테스트 | 기능, 전체 테스트 |
🔥 추가 기능 구현시 업데이트 예정
- User model
- User 모델은 Django의
AbstractBaseUser
를 overriding
- User 모델은 Django의
- Post model
- USER ↔ POST (1:N)
- POST ↔ HASHTAG (N:M)
- POST ↔ USER (N:M) (좋아요 기능)
- HashTag model
├── apps
│ ├── account
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── forms.py
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── serializers.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── post
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── paginations.py
│ │ ├── permissions.py
│ │ ├── serializers.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ └── urls.py
├── config
│ ├── asgi.py
│ ├── settings
│ │ ├── base.py
│ │ ├── dev.py
│ │ ├── prod.py
│ │ └── test.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
- 로컬에서 실행할 경우
# 프로젝트 clone(로컬로 내려받기)
git clone -b develop --single-branch ${github 주소}
cd ${디렉터리 명}
# 가상환경 설정
python -m venv ${가상환경명}
source ${가상환경명}/bin/activate
# window (2 ways)
# 1> ${가상환경명}/Scripts/activate
# 2> activate
# 라이브러리 설치
pip install -r requirements.txt
# 실행
python manage.py runserver