전에 어디서 영어로 된글인데, 대충 이런 내용이 담겨있었던것 같거든요. “url 패턴하

 
Han Cold Kim

전에 어디서 영어로 된글인데,

대충 이런 내용이 담겨있었던것 같거든요.

“url 패턴하고, view 이름을 똑같이 하지마라 바보같은 짓이다” 뭐 이런…?

그니까 예를들어

url(‘^users/change-password$’), views.changePassword)

뭐 위와 같이 똑같이(거의 비슷하게) 하지 말라고했었던것같은데…

근거는 기억이 안나고요… 그래서 다시한번 보고싶은데

혹시 이런 글을 아시는분…

  • Han Cold Kim

    근데 제 생상속의 글 일지도 모르겠네요…?

    똑같이 사용해도 큰 문제 없는것같은데…

    박영록

    Django 매뉴얼에 자동으로 디스패치할 수 있는 형태로 쓰지 말라는 권고는 있어요. 보안 문제가 약간 있긴 하죠. 하지만 전 별로 들을 가치가 없는 조언이라고 생각해요. 이제 파이썬도 레일즈의 convention over configuration을 배울 때라고 생각해요.

    Han Cold Kim

    헙 그렇군요… 장도 메뉴얼에…

    이경표

    보통 다 비슷하게 만들지 않나요.. 편의를 위해

    Kenial Lee

    박영록 어떤 내용인지 여쭤봐도 괜찮을까요? 갑자기 궁금해져서 구글링해봤는데 나오질 않아서 … ‘ ‘)a ;;

    박영록

    Tying URLs to Python function names is a Bad And Ugly Thing. https://docs.djangoproject.com/en/dev/misc/design-philosophies/#url-design 이겁니다. 대문자까지 써가면서 Bad And Ugly라고 말하고 있네요.

    Alan Kang

    제 생각엔 함수명은 주로 동사고 URL은 주로 명사(resource)일테니 함수명과 URL이 일치되면 대체로 나쁜게 아닌가 싶은데요. 위 예에서는 url이 동사라 좀 별로인게 아닌가 싶어요. 예를 들어 GET /password는 패스워드 수정 폼을 보여주고 PUT /password 혹은 POST /password?_method=PUT 이 패스워드 수정을 수행하는 식이 좋지 않나요?

    Kenial Lee

    감사합니다 박영록님-

    막상 제가 기대한 Bad and Ugly한 상세한 이유에 대해서는 적혀 있질 않군요(어쩐지 검색해도 안 나오더라니 -_-;;)

    저는 대개 외부에 노출될 일이 없는 API 작업을 많이 하는지라 대부분 view 이름과 url 패턴을 일치시키는 편입니다. 팀 동료가 REST 스타일의 resource url 보다는 기능 하나마다 url이 하나씩 떨어지는 (e.g. member 목록을 가져오는 API는 /members, member 정보를 업데이트하는 API는 /update_member…) 방식을 좋아해서 그 방식에 맞춰주고 있는 상황이거든요.

    근데 제 경우가 흔치 않은 경우인 것 같고, 웹 서비스를 구축하면서 사용자에게 url이 직접 노출되는 경우라면 사실 view와 url 이름을 일부러 일치시키기도 어려울 것 같습니다(…) 코드를 읽을 때 이게 사용자의 view에서 정한 이름인지 서버의 view에서 정한 이름인지조차도 헷갈릴 것 같고요. 보통 웹 사이트의 url은 사용자의 view에서 정해지는 경우가 대부분일테니까요.

    Kyungmun Ryu

    짐작으론 class based generic view를 권고할줄 알았는데 나름 이유는 있네요. 웹서비스를 제공하는 측에서 서비스의 버전관리를 고민하게 되는데 이때 가이드에서 제시한 내용은 충분히 이유가 될만합니다. 그외는 그다지 설득력은 없네요. 일반적인 웹사이트 개발에는 이수겸님 댓글대로 저도 그렇게 씁니다.

    박영록

    문서에 이유는 없지만 몇 가지 추정되는 이유가 있긴 하죠. 우선, 파이썬은 explicit를 implicit보다 선호합니다. 그러니까 urls.py에 명시적으로 선언하는 것이 이름으로 자동 매핑하는 것보다 낫다고 보는 것일 테죠.

    또 하나의 실질적인 문제는 보안 문제입니다. 함수랑 url을 엮어버리면 view로 의도하지 않은 함수를 사용자가 호출할 수 있게 되죠. 제가 만든 djangox-route에도 있는 문제입니다;;

Advertisements