팀프로젝트 막바지에 돌입했는데 왜 하면 할수록 자잘한 오류들이 보이는지 ㅋㅋ
그 중 오래 고민하다가 매니저님 조언을 듣고 해결한 오류에 대해 적어보려고 한다.
우선 mypage와 userbucket.html은 비슷하지만 다른 html로 잡아준 이유가 있는데 mypage의 경우에는 회원프로필수정이 가능하게 링크를 잡아주고 다른 user의 userbucket에서는 수정이 불가능하게 나눠주었다. html에서 가져오는 get data는 매우매우 유사하다.
<p>Blog : <a href="{{user.blog}}">{{user.blog}}</a></p>
다만 그 페이지들에서 회원정보를 작게 표현해주는데 username,mbti,tmi 등은 그냥 텍스트로 표현해주면 되지만 blog 같은 경우에는 클릭 시 바로 블로그주소로 넘어갈 수 있게 링크를 걸었는데 여기서 오류가 발생했다. 예를 들어 블로그 주소에 사용자가 velog.io/@alswo9872 와 같은 형식으로 입력해주면 http://127.0.0.1:8000/bucket/userbucket/2/velog.io/@alswo9872 이런식으로 get형식을 넘겨주게 된다. 사실 처음에는 http없이도 제대로 진행이 되었었는데 이후에 오류가 생기는 것은 아직까지 이유를 모르겠다. 하지만 이는 중요한게 아니고 현재 상태에서 https://velog.io/@alswo9872 로 사용자가 블로그 주소를 입력하면 그대로 제대로 된 링크로 넘어가게 된다.
<p>Blog : <a href="http://{{user.blog}}">{{user.blog}}</a></p>
일단 내가 제시한 해결방식은 이런식으로 진행해보기도 했는데 이렇게 하면 결국엔 http가 붙은 주소에 대해선 또 다시 중복된 http가 들어가서 페이지오류가 생긴다. 그래서 일단 처음에 제시해주신 해결방법은 장고 자체가 가지고 있는 장고템플릿랭귀지(DTL)에서 링크를 받아오는 형식을 파악해보려 했으나 따로 알아볼 수 있는 사이트가 없었고, 이후에 매니저님께서 어쩌면 장고가 가진 속성이 아니라 href가 가진 속성이 http가 포함되어 있으면 앞에 것을 무시하고 http사이트로 넘어가게 해준다. 그리고 http가 없으면 오류가 생기는 것이기 때문에 해결방법을 2개 제시해주셨다.
- 회원정보 입력 시에 유저에게 http형식이 아니면 수정을 하지 못하게 제한을 둔다. 하지만 이 방법은 앞서 회원가입 때 유저의 input값을 제한할 수 있을까 하는 질문에 튜터님이 장고 심화에서 다른 방법을 배우는 것이 있다고 한 답변과도 겹쳐서
- 두번째 방법을 사용하기로 했다. 다소 무식한 방법이긴 하지만 view.py의 함수에 직접 if문을 적용해주는 것이다.
if request.user.blog and not request.user.blog.startswith('http'): request.user.blog = 'http://' + request.user.blog
이렇게 요청받은 user.blog(db에 입력된 블로그 주소이다.)가 http로 시작하지 않는다면 그 녀석을 강제로 http를 붙여서 표현해주는 것이다. 이렇게 하면 일단 해결은 되고 미니프로필 html에 표현되는 값이 http가 붙은 형태로 나오지만, db에는 업데이트가 되지 않아서 예상컨데 매번 request 할때마다 위의 조건문을 반복할 것 같다. 이것을 다시 해결하려면 http받은 값을 db에 다시 올려주는 로직이 필요할 것 같은데, 이것보단 역시 장고심화에서 배우는 입력값에 대한 제한(?)에 관한 학습이 필요할 것 같다. 나중에 학습이 이루어지고 난다면 다시금 이 TIL을 돌아보면서 의미를 되새겨보는 것도 좋지 않을까?