게시물 등록 구조는 로그인, 회원가입을 다뤘던 user와는 완전 다른 데이터 및 기능을 다루니 새로운 app을 만들자.
app 만들기 : python manage.py startapp posting
user.models
에서 User
를 import 한다.username
을 User
앱을 FK로 연결한다. image_url
url이 길어질 수 있으니 max_length=2000
으로 넉넉하게 잡아야 한다. created_at
은 auto_now_add=True
를 쓴다. description
설명란 없이 이미지 업로드가 가능하기 때문에 description은 null=True
를 함께 포함시켜야 한다.for문
을 돌려서 게시물을 하나씩 뽑는다.image_url
, description
, username
, created_at
데이터를 가져와서 posting_list
에 append한다. ⛳️ 데이터 값
1. 프론트에서 body로 넘겨준 데이터를 하나씩 변수에 담는다.
2. description
은 null=True
로 설정했기 때문에 설명란이 없는 게시물은 error가 뜨지 않게 .get()
을 활용해 None
값을 받을 수 있게 만든다.
3. user
는User.objects.get()
을 활용해 데이터로 입력 받은 username
값을 데이터베이스에서 가져온다. 데이터베이스 값을 굳이 가져오는 이유는.. 차후 데이터베이스 값과 프론트에서 받은 username
값을 비교해야 하기 때문이다! 게시물은 사용자 본인만 올릴 수 있기 때문이다.
장고쉘에서 한 번 더 확인하기
>> user = User.objects.get(username='goyangee1004') >> user.username 'goyangee1004'
⛳️ 조건문
4. 만약 user의 username
(goyangee1004)이 user
즉 데이터베이스 값(goyangee1004)과 일치하지 않으면 INVALID_USER
error가 뜬다.
5. 일치시 프론트에서 받은 내용으로 Posting.objects.create()
으로 새로운 게시물을 만든다!
인스타그램은 댓글 수정이 불가능하다... 댓글 삭제, 또는 대댓글 작성만 가능하다. 그러므로 updated_at은 필요하지 않다! 직접 인스타그램으로 들어가 확인해봤다.
1. comment_userame
은 User 앱을 FK로 연결한다.
2. text
는 사용자가 게시물에 남기는 댓글 내용이다.
3. created_at
은 댓글 생성 시간이다.
4. posting_photo
는 Posting 앱을 FK로 연결한다.
5. root
는 대댓글 작성시 필요한 변수니 다른 포스팅에서 다루겠다.
comment_username
, text
, posting_photo
, created_at
, root
데이터를 가져와서 posting_list
에 append한다.⛳️ 데이터 값
1. 프론트에서 body로 넘겨준 데이터를 하나씩 변수에 담는다.
게시물 등록과 로직 flow과 비슷하니 기타 step은 넘어가겠다 :)
⛳️ 조건문
2. text
즉 댓글 내용이 없는 경우 TEXT_FIELD_REQUIRED
error를 띄운다.
3. 게시물 url이 존재하지 않는 경우 INVALID_IMAGE
error를 띄운다.
4. 위에 조건들을 다 통고하는 경우 Comment.objects.create()
으로 새로운 댓글을 등록한다!