Variable Routing Variable Routing은 웹 애플리케이션의 URL 경로에 가변적인 요소를 포함하여 동적으로 처리할 수 있도록 하는 라우팅 방식입니다. 웹 프레임워크에서 자주 사용되며, URL 경로에 매개변수를 포함하여 특정 데이터를 처리하거나 동적인 페이지를 렌더링하는 데 활용됩니다.
Variable Routing은 URL에서 가변적인 부분(변수)을 정의하고, 이를 기반으로 요청을 처리합니다. 변수는 URL 패턴에 포함되며, 서버 측에서 이를 추출하여 로직에 사용할 수 있습니다. 예시 URL: /user/42 라우팅: /user/<id> 처리: id 값을 사용하여 데이터베이스에서 사용자 정보를 가져옴. 여기서 user를 더함과 동시에 밑에 <username>을 만들었습니다. 먼저 users/는 만약 누군가가 users/로 접속하면 views.users를 실행하지만, 만약 users/ 다음에 어떠한 혹은 아무거나 따로 붙으면, 그것을 <username>이라는 변수에 담아서 views.profile에 같이 넘김과 동시에 같이 처리한다 라는 뜻입니다.
그러면 이제 profile이라는 함수를 만들어야 합니다.
하지만 뭔가 다릅니다. request말고 다른 값도 받고 있습니다. 바로 username입니다. 위에서 설명하듯, 만약 users 다음에 어떠한 값이 더 들어오면, 그 값을 username이라는 변수에 넣어서 views.profile에 보낸다라고 했습니다. 그렇듯, 이 값을 받아야 하기 때문에 더해진 것입니다. 그리고 저 값을 context에 넣어서 쓸 수 있습니다
이렇게 말입니다. 흐름은 대표적으로, user다음으로 적힌 이름이 username이라는 변수에 들어가, 그걸 함수로 가져와서 context에 넣은 다음, 그것을 다시 표시하는 것입니다.
참고로 <username>에서 str 기본값 / 빼고 나머지 문자열을 변수로 처리 int 0 또는 양의 정수를 변수로 처리 을 쓸 수 있습니다.
이렇게 쓸 수 있습니다. 그러면 문자열을 변수로 넣음(참고로 아무것도 안 넣어도 str이 디폴트입니다.)
Mulitple Apps
솔직히 이렇게 많은 것을 하나의 app에서 하려는 건 쉽지 않은 일이다.
그렇기에 비슷한 기능끼리 묶어서 따로 따로 다 다른 app에다가 하는 것입니다.
먼저, 또 다른 app을 하나 만들어야 합니다.
python manage.py startapp users
그리고 처음에 만들었던 앱과 지금 만든 user 앱 파일에 각 urls.py라는 파일을 하나 만들어 줍니다
그리고 그 urls.py안에 urlpatterns = []라는 리스트를 하나 만들어 줍니다. 이러면 각 html 파일도 따로 만들어서 각 앱마다 실행할 수 있는 사이트도 달라집니다.
여기서 처음 만들었던 앱 urls.py에 예전에 만들었던 path들과 값들을 그대로 넣어줍니다. (참고로 .을 통해 현재 디렉토리를 표현할 수 있습니다. from . import views) <- 이건 first_app에서 views를 가져와야 하는데, urls.py는 이미 first_app 안에 있기 때문에 쓸 수 있습니다.)
그런데 이상한 건 user_app에서는 first_app을 들고와야 합니다. 그 이유는 views.users에서 users라는 함수는 first_app에 있기 때문입니다.
하지만, 처음으로 request가 들어왔을 때는, 먼저 app이 아닌 처음 project인 urls로 들어가 됩니다. 즉, app에 있는 urls를 project urls와 연결해야 합니다. 이때, include를 써야 합니다. include는 django에서 지원하기 때문에, 파이썬의 include가 아닙니다.
여기를 보면, first_django 즉, 처음 만들었던 project의 파일에 있는 urls.py 입니다. 그런데 저기에 왜 굳이 더 붙여줄까요? 그 이유은 request에 있습니다 만약 users/kevin/....으로 링크를 넣으면, 맨 밑에 있는 users가 응답을 하게 됩니다. 즉, users 영역 안으로 들어왔기 때문입니다. 그러면 users/를 제외한 나머지 kevin/.....이 부분이 뒤에 있는 include('users.urls')로 들어가게 됩니다. 즉, 사실상 에러가 뜨게 됩니다.
왜냐하면 kevin/...만 들어가기 때문에 users로 시작하는 링크가 없기 때문입니다. 즉, users/users/kevin으로 치지 않는 이상은 에러가 뜨게 된다는 뜻입니다. 그 말은,
이렇게 바꾸면 된다는 소리 입니다. 그렇게 되면, users/kevin...에서 users/는 첫번째 urls.py에서 처리가 되어, include가 활성화 되면서 kevin/...만 들어가게 되는데, str:username과 들어맞게 되면서 작동하게 되는 겁니다.
그런데 이렇게 보니, users 안에 views.py에는 'users.html'와 'profile.html'이 있습니다. 이것은 솔직히 first_app에 있는 templates라는 폴더에 위치합니다. 이것도 똑같이 users 앱에 templates라는 폴더를 만들어 그 안으로 옮기면 됩니다.
그리고 이제 별명이라는 개념이 나옵니다. 예를 들어,앱을 나눔으로써, 이제 링크가 각각 다르게 변합니다. 근데 문제는 그 링크와 연결되어 있는 다른 링크들도 전부 바꿔줘야 한다는 겁니다. 이러한 문제를 해결하기 위해 별명이라는 방법이 있습니다. 즉, 링크에 별명을 붙이는 겁니다.
먼저 first_app에 name을 각 붙입니다
그리고 datathrow에서 전송을 위해 만약 데이터를 보낼 곳으로 {% url 'name' %}을 넣어 url은 data-catch의 url을 가지고 있는 name인 data-catch을 넣습니다. 장점은, 만약 위에서 'data-catch/'를 다른 글자로 바꿔도(예를 들어, data로 바꾸면 하위 링크들은 전부 data/..로 바꿔야 한다)name은 그래도 값을 유지시키기 때문에 하위 링크들을 바꿀 필요가 없어집니다.