티스토리 뷰
<Complete List>
1. 데이터베이스 및 UI 설계하기
- 인스타그램 UI 구성
- 데이터베이스 테이블 설계 및 구현
2. 앱 만들기
- instagram, accounts 앱 만들기
- views.py 분리하기
3. 회원가입 페이지
- 비밀번호 암호화 함수 구현 - 해시 함수
4. 로그인 페이지
- 세션에 사용자 ID 저장하기
5. 로그아웃 뷰
6. 메인 페이지
- 6-1. 좋아요 뷰 / 좋아요 취소 뷰
- 6-2. 북마크 뷰 / 북마크 취소 뷰
7. 포스트 리스트 페이지
- 7-1. 팔로우 뷰 / 언팔로우 뷰
- 7-2. 팔로잉 계정 리스트 모달
- 7-3. 컬렉션 탭 추가
8. 포스트 상세 페이지
9. 포스트 업로드 페이지
10. 회원 정보 수정 페이지
11. 비밀번호 수정 페이지
12. 포스트 수정 페이지
13. 포스트 삭제 뷰
<To Do List>
9-1. 포스트 업로드 페이지
- 해시태그 입력
12-1. 포스트 수정 페이지
- 해시태그 수정
6-3. 메인 페이지
- 해시태그 띄우기
9-1. 포스트 업로드 페이지(해시태그 입력)
- pystagram에서 작업
- 포스트 업로드 페이지의 해시태그 입력
해시태그와 포스트의 관계는 다대다 관계이다. 논리적으로는 다대다 관계를 표현할 수 있지만 실제 테이블에서 구현할 때
는 2개의 테이블만으로는 구현할 수 없다. 다대다 관계를 실제로 구현하기 위해선 각 테이블의 Primary Key를
Foreign Key로 참조 하고 있는 연결 테이블(매핑 테이블)을 사용해야 한다. 따라서, 해시태그를 위한 테이블을 만들 때,
post
, post_hashtag
(연결 테이블), hashtag
총 3개의 테이블이 필요하다. (참고)
9-1.1 PostUploadView
hashtags = request.POST.get('hashtag')
hashtags = hashtags.split(" ")
...
try:
cursor = connection.cursor()
strSql = "INSERT INTO post(user_id, post_img_url, content)"
strSql += " VALUES(%s, %s, %s)"
result = cursor.execute(strSql, (user.username, post_img_url, content))
insertedPostId = cursor.lastrowid
for tag in hashtags:
if tag.startswith("#"):
# hashtag 테이블에 등록된 해시태그인지 확인
strSql = "SELECT hashtag_id FROM hashtag WHERE keyword = (%s)"
result = cursor.execute(strSql, (tag,))
data = cursor.fetchall()
# 등록되지 않은 해시태그인 경우, hashtag 테이블과 post_hashtag 테이블 모두 INSERT
if result == 0:
strSql = "INSERT INTO hashtag(keyword)"
strSql += " VALUES(%s)"
result = cursor.execute(strSql, (tag,))
insertedHashtagId = cursor.lastrowid
strSql = "INSERT INTO post_hashtag(post_id, hashtag_id)"
strSql += " VALUES(%s, %s)"
result = cursor.execute(strSql, (insertedPostId, insertedHashtagId))
# 등록된 해시태그인 경우, post_hashtag 테이블에만 INSERT
else:
strSql = "INSERT INTO post_hashtag(post_id, hashtag_id)"
strSql += " VALUES(%s, %s)"
result = cursor.execute(strSql, (insertedPostId, data[0][0]))
cursor.lastrowid
: 커서를 통해INSERT
된 row 중 가장 마지막 row의 id 값을 가져온다.
9-1.2 post_create.html
- 전체코드 - github
- 해시태그 입력 칸 추가
12-1. 포스트 수정 페이지(해시태그 수정)
- pystagram에서 작업
- 포스트 수정 페이지의 해시태그 수정
12-1.1 PostModifyView
-
해시태그같은 경우
hashtag
테이블에서 수정하는 것이 아니라post_hashtag
테이블에서 수정해줘야 한다. 그렇기때문에 포스트 데이터를 수정하는 것보다 경우의 수도 많으며, 그에 따라 로직도 다르게 처리해야하기 때문에 복잡하
다. 따라서,
post_hashtag
테이블에서 기존에 포스트와 해시태그가 연결된 row들을 모두 삭제한 후, 마치
...
if request.method == "GET":
try:
...
strSql = "SELECT H.keyword"
strSql += " FROM hashtag H"
strSql += " JOIN post_hashtag PH ON H.hashtag_id = PH.hashtag_id"
strSql += " WHERE PH.post_id = (%s)"
result = cursor.execute(strSql, (post_id,))
datas = cursor.fetchall()
# 모든 해시태그를 합쳐 하나의 문자열로 만들어 해시태그 수정 칸에 띄워주기 위함
hashtags = " ".join([x for row in datas for x in row])
post['hashtags'] = hashtags
...
else:
modifiedhashtags = request.POST.get('hashtag')
modifiedhashtags = modifiedhashtags.split(" ")
try:
...
strSql = "DELETE FROM post_hashtag"
strSql += " WHERE post_id = (%s)"
result = cursor.execute(strSql, (post_id,))
for tag in modifiedhashtags:
if tag.startswith("#"):
strSql = "SELECT hashtag_id FROM hashtag WHERE keyword = (%s)"
result = cursor.execute(strSql, (tag,))
data = cursor.fetchall()
if result == 0:
strSql = "INSERT INTO hashtag(keyword)"
strSql += " VALUES(%s)"
result = cursor.execute(strSql, (tag,))
insertedHashtagId = cursor.lastrowid
strSql = "INSERT INTO post_hashtag(post_id, hashtag_id)"
strSql += " VALUES(%s, %s)"
result = cursor.execute(strSql, (post_id, insertedHashtagId))
else:
strSql = "INSERT INTO post_hashtag(post_id, hashtag_id)"
strSql += " VALUES(%s, %s)"
result = cursor.execute(strSql, (post_id, data[0][0]))
...
12-1.2 post_modify.html
- 전체코드 - github
- 해시태그 수정 칸 추가
6-3. 메인 페이지 (해시태그 띄우기)
- pystagram에서 작업
- 메인 페이지의 포스트 별 해시태그
6-3.1 MainView
# 포스트 별 해시태그
strSql = "SELECT H.keyword"
strSql += " FROM post_hashtag PH"
strSql += " JOIN hashtag H ON PH.hashtag_id = H.hashtag_id"
strSql += " WHERE PH.post_id = (%s)"
result = cursor.execute(strSql, (raw_data['post_id'],))
data = cursor.fetchall()
hashtags = [x for row in data for x in row]
raw_data['hashtags'] = hashtags
6-3.2 main.html
- 전체코드 - github
- 해시태그 칸 추가
포스트 상세 페이지에도 클릭된 포스트와 연결된 해시태그를 띄워줘야 하므로 위와 똑같이 반영한다.
'Django > ▶-----Pystagram' 카테고리의 다른 글
[Django App 3-14] 인스타그램 클론 코딩_DISQUS 추가 (0) | 2020.03.31 |
---|---|
[Django App 3-13] 인스타그램 클론 코딩_검색결과 페이지 (0) | 2020.03.25 |
[Django App 3-11] 인스타그램 클론 코딩_팔로잉 계정 리스트 모달&컬렉션 탭 (0) | 2020.03.15 |
[Django App 3-10] 인스타그램 클론 코딩_좋아요 뷰/좋아요 취소 뷰&북마크 뷰/북마크 취소 뷰 (0) | 2020.03.08 |
[Django App 3-9] 인스타그램 클론 코딩_포스트 수정 페이지&포스트 삭제 뷰 (0) | 2020.03.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Django 해시태그
- Django 로그인
- Django 컬렉션
- Django 회원 정보 수정
- Django Instagram
- Django 팔로우
- Django 좋아요
- MySQL
- Django 어플리케이션
- Django 댓글
- Django 회원가입
- Django 북마크
- Django 검색
- Django application
- python
- 장고
- Django 비밀번호 수정
- Django 로그아웃
- Django 업로드
- java
- Django 인스타그램
- Redis
- Redis Cache
- Django
- 서점 어플리케이션
- 파이썬
- 북마크 어플리케이션
- Django 프로젝트 생성
- query parameter
- Django User
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함