인프런 커뮤니티 질문&답변

퀀텀코더님의 프로필 이미지
퀀텀코더

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

Mixin 소개 및 Commentapp 구현

models.py에서 서버단에서 확인한다는 의미와 create.html관련 질문 드리겠습니다.

작성

·

138

0

models.py에서 모델을 설계할때

전 강의서부터, 

어떤 필드들은 foms.py에서 메타클래스로 관리를 하고

어떤 필드들은 서버단에서 관리를 한다고 하시는데...

 잘 와닿지 않아서요..ㅜㅜ

그 이유와 목적을 여쭤볼 수 있을까요..? 

2.

그리고 create.html에서 히든인풋을 만들어 놓는 이유도 

여쭤볼 수 있을까요???

<input type="hidden" name="article_pk" value="">

저 부분인데 설명하시기를

"히든이라는 타입을 가진 인풋을 만들면 나중에 

article_pk, 현재 article의 pk가 무엇인가 를 나중에

value값을 통해서 넘겨줄거고, 그거를 서버에서 받아서 comment를 만들때 완성할겁니다."

라고 하셨고, 추후에 article/detail.html에서

with article=target_article %} 을 통해

create.html안에서 변수를 쓸수 있게 된다고 하셨습니다.

그리고 value = {{ article.pk }} 를 해주셔서

"숨겨서 보내는 article.pk라는 밸류에 article.pk를 담아서 서버로 보낸다"라고 하셨는데 무슨말인지 전혀 모르겠네요...

숨겨서 보내는 건 어떤 의미가 있고, 왜 이렇게 하는지

설명 부탁드려도 될까요?

답변 1

0

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

안녕하세요.
질문 확인했습니다.


1. 특정 필드는 서버단에서 관리하는 이유.

예를 들어서, 게시글을 작성한다고 생각하겠습니다.
그러면 저희가 models.py 파일 내부에 작성한 게시글 모델에 있는 정보는
제목, 이미지, 작성자, 내용 정도죠.

물론 다른 필드도 있긴 하지만 상관없는 내용이기 때문에 제외하겠습니다.

그렇다면 제목, 대표 이미지, 내용은 게시글을 작성하는 유저로부터 입력을 받아야 하는것이 맞습니다.
그런데 작성자가 누구인지도 작성자로부터 입력을 받아야 할까요?

작성자가 물론 본인이다 라고 작성할 수도 있겠지만,
A라는 유저가 게시글을 작성했는데, 작성자란에 B 유저라고 작성하면 어떻게 될까요?
물론 문제가 있겠죠?

그렇기 때문에 작성자가 누구인지에 대한 내용은 유저에게 입력을 받지 않고,
서버에서 직접 게시글 작성요청을 보낸 유저가 누구인지 식별하고,
해당 게시글의 작성자를 설정하겠다는 것입니다.

요지는, 유저에게 입력을 받아야하는 내용과,
유저에게 입력을 받으면 문제가 될 소지가 있는 내용이 있다는 것이고,
그런 내용을 분리하여 관리하는 것입니다.


2. create.html 에서 히든 인풋을 만들어놓는 이유

이 내용도 위의 내용과 비슷합니다.

댓글 모델에 저희가 작성한 내용이 무엇인가요?
댓글이 달린 게시글, 작성자, 작성시간, 내용 이정도입니다.

작성시간은 자동으로 생성되기 때문에 상관이 없고,
작성자는 1번 답변을 드린것처럼 서버에서 유저를 식별할 것입니다.

그럼 나머지 2개가 남았네요.
댓글 내용과 댓글이 달린 게시글입니다.

댓글 내용은 그냥 그대로 유저에게 입력받으면 됩니다.

그런데 댓글이 달린 게시글은 어떻게 해야할까요?

물론 이 값도 서버에서 처리를 하는 방법도 있습니다.
하지만 제 강좌에서는 조금 복잡하게 하기보다는,
간단하게 html 단에서 처리하려고 한거죠.

그래서 html form 내부에 추가적인 input 을 넣었습니다.
그런데, 이 input 에 유저가 입력할 필요가 있을까요?

당연히 해당 게시글에 댓글을 달았기 때문에,
해당 input 에는 지금 댓글을 쓰고 있는 게시글의 정보가 들어가야 합니다.

그렇기 때문에 해당 내용은 유저가 입력할 필요가 없기 때문에 숨기고(hidden),
들어가는 내용 게시글을 식별할수 있는 정보(article.pk) 가 들어가는 겁니다.

답변이 도움이 되셨으면 좋겠네요.
감사합니다-

저도 관련해 궁금한게 있습니다.

물론 댓글 비활성화 article인데 comment를 만드려고 하는 위변조는 위 form_valid로 예방하지 못하겠지만,

commentapp/view.py에 form_valid 를 통해 comment 생성을 시도하는 사용자가 writer가 맞는지 그리고 article_pk값이 유효한지 점검(validation)하여  클라이어트에서의 값 위변조를 1차적으로 막을 수 있는 것 맞나요?

 

퀀텀코더님의 프로필 이미지
퀀텀코더

작성한 질문수

질문하기