본문 바로가기

TIL

23.04.05 TIL

오늘 한 것

  1. 코딩테스트(순서쌍개수,소수찾기,소수만들기)(https://spear-mans-dev.tistory.com/6)
  2. ERD 설계 강의 수강(정리)
  3. Django 강의 수강(작성중...)

문제 1. Django: redirect실패

@login_required
def write_comment(request,id):
    if request.method=='POST':
        ...
        return redirect(f'tweet/{id}')

위와 같이 veiws.py에 코드를 작성하였더니 브라우저에서 POST요청을 보낸뒤 다음과 같이 에러가 발생했다.

시도 1. urls.py 확인

에러메시지를 읽어보면, 등록되지 않은 주소에 접근하려 했다는 걸 알 수 있다. 그래서 urls.py를 먼저 확인해 제대로 주소를 등록했는지 확인해봤더니

path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),

잘만 있었다...

시도 2. id의 문제인지 확인하기

@login_required
def write_comment(request,id):
    if request.method=='POST':
        ...
        # return redirect(f'tweet/<int:id>')
        # return redirect(f'tweet/{id}')
        # return redirect(f'tweet/{id}/')
        # return redirect(f'tweet/'+str(id))
        # return redirect(f'tweet/'+str(id)+'/')

혹시 id를 주소에 반영하는 방식이 잘못되었나 싶어 확인해 보았더니, 변하는 것이 없이 아무것도 제대로 되지 않았다.
그래서 에러메시지를 다시 잘 읽어보니...

해결. 절대 경로

주소 앞에 /를 붙이지 않으면 해당 주소는 현재 주소를 기준(root)으로 하는 상대경로가 된다. 예를 들어 현재 주소가 http://localhost:8000/tweet/comment/4이면, 상대 경로의 기준이 되는 곳은http://localhost:8000/tweet/comment/가 되고, 위에서 작성한 상대경로는 http://localhost:8000/tweet/comment/tweet/{id}가 된다. 이런 경로는 지정한적 없으니 당연히 오류가 뜬 것이다.
따라서 다음과 같이 절대경로로 고치니 정상작동하였다.

return redirect(f'/tweet/{id}')

이것은 서버의 전체 root으로부터의 경로를 지정하는 것이다.

문제 2. VScode: formatter의 자동 line break

위와 같이 조금만 줄이 길어져도 저장시 formatter가 자동으로 줄을 바꿔버리는 문제가 있었다.
가독성이 떨어지거나 html의 경우 django에서 인식하는 {} 구문을 개행해버려서 오류가 발생할 수도 있다.

시도 1. save of format 끄기

이 옵션을 끄면 저장할 때 포매터가 개행을 하는 것을 포함해 컨밴션에 맞춰 들여쓰기나 빈 줄 추가등을 하지 못하게 한다. 그러나 저장할 때 컨벤션을 맞추는 것은 꽤 편리한 것이므로 이걸 끄고 싶지 않았다.

시도 2. Prettier 없애고 Unibeautify 쓰기

동기들 중 유사한 문제를 겪는 사람이 있어 그분으로 부터 정보를 얻을 수 있었다.(감사합니다 상빈님)
자꾸만 개행을 하는 이유는 Prettier확장 기능이 하는 것이었다. 여러가지 설정을 건드리면 해결 될 것 같긴하나 건드리기엔 너무 복잡하고 직관적이지도 않았고, pep8에 맞게 포매팅하는 것은 프리티어가 없어도 되므로 그냥 삭제하고 대신에 django-html등을 인식하여 알맞게 포매팅 할 수 있다는 Unibeautify를 쓰기로 했다. 찾아보니 설정 파일자체를 수정하여 수정을 할 수 있는 것 같았지만(링크), 이해하기 어려워 일단 설치만 했다... 언젠가는 다시 살펴보리라.
근데 프리티어를 언인스톨 하니까 저장시 포매팅이 안됐다.

해결. 수동으로 포매팅 한번 하기

한번 수동으로 포매팅(mac: shift+opt+F)를 하니 알아서 포매터를 연결하여 이후 저장할때마다 포매팅 되었다.

오늘 배운 것

  • 프로젝트를 진행함에 있어 중요한 ERD를 작성하는 법의 기본을 배웠다.
  • 장고를 통해 기초적인 CRUD를 하는 방법을 배웠다.
  • 장고에서 url을 작성할 때 절대경로와 상대경로의 작동 방식에 대해 알았다.
  • vscode에서 확장기능을 사용할 때에는 매우 다양한 설정을 통해 원하는 기능을 사용하거나 막을 수 있으며 직접 설정 파일을 수정해서 적용 할 수 있다.
  • '에라스토테네스의 체' 라는 알고리즘을 배웠다.

레퍼런스

취미부자 개발자 로즈,
임상빈 동기님,
VSCode에서 Django 템플릿 오토 포매팅하기,
Django: Get relative uri from views.py

'TIL' 카테고리의 다른 글

23.04.10 TIL(팀플 개발일지)  (2) 2023.04.11
23.04.07 TIL  (0) 2023.04.08
23.04.06 TIL  (0) 2023.04.07
23.04.04 TIL  (0) 2023.04.05
04.03 TIL  (1) 2023.04.04