오늘 한 것
- 코딩테스트(순서쌍개수,소수찾기,소수만들기)(https://spear-mans-dev.tistory.com/6)
- ERD 설계 강의 수강(정리)
- 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 |