You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ko/django_models/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -149,7 +149,7 @@ class Post(models.Model):
149
149
*`models.DateTimeField` - 날짜와 시간을 의미합니다.
150
150
*`models.ForeignKey` - 다른 모델에 대한 링크를 의미합니다.
151
151
152
-
시간 관계상 모든 코드를 하나하나 다 설명하지는 않을 거예요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 장고 공식 문서를 꼭 읽어보길 바랍니다. : https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types)
152
+
시간 관계상 모든 코드를 하나하나 다 설명하지는 않을 거예요. 대신 모델의 필드와 정의하는 방법에 궁금하다면 장고 공식 문서를 꼭 읽어보길 바랍니다. : https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types)
153
153
154
154
`def publish(self):`는 무슨 뜻일까요? 이것이 바로 앞서 말했던 `publish`라는 메서드(method) 입니다. `def`는 이것이 함수/메서드라는 뜻이고, `publish`는 메서드의 이름입니다. 원한다면 메서드 이름을 변경할 수도 있어요. 이름을 붙일 때는 공백 대신, 소문자와 언더스코어를 사용해야 합니다. 예를 들어, 평균 가격을 계산하는 메서드는 `calculate_average_price`라고 부를 수 있겠네요.
Copy file name to clipboardExpand all lines: ko/django_urls/README.md
+15-40Lines changed: 15 additions & 40 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,104 +20,79 @@ URL은 웹 주소랍니다. 웹 사이트를 방문할 때마다 브라우저의
20
20
21
21
[...]
22
22
"""
23
-
from django.conf.urls import url
24
23
from django.contrib import admin
24
+
from django.urls import path
25
25
26
26
urlpatterns = [
27
-
url(r'^admin/', admin.site.urls),
27
+
path('admin/', admin.site.urls),
28
28
]
29
29
```
30
30
31
31
장고가 이미 어떤 내용을 넣어 두었네요.
32
32
33
-
`#`로 시작되는 줄은 주석이에요. 파이썬은 주석을 실행하지 않아요. 꽤 유용하겠죠?
33
+
세 개의 따옴표들(`"""`, `'''`) 사이에 있는 줄들은 독스트링(docstring)입니다. 독스트링은 파일 제일 첫 부분, 클래스 또는 메서드 윗 부분에 작성해, 이들이 어떤 일을 수행하는지 알려줍니다. 파이썬은 이 부분을 실행하지 않을 거에요.
34
34
35
35
이전 장에서 봤던 관리자 URL도 여기에 이미 있어요.
36
36
37
37
{% filename %}mysite/urls.py{% endfilename %}
38
38
```python
39
-
url(r'^admin/', admin.site.urls),
39
+
path('admin/', admin.site.urls),
40
40
```
41
41
42
42
장고는 `admin/`로 시작하는 모든 URL을 *view*와 대조해 찾아냅니다. 무수히 많은 URL이 `admin URL`에 포함될 수 있어 일일이 모두 쓸 수 없답니다. 그래서 정규표현식을 사용합니다.
43
43
44
-
## 정규표현식(Regex)
45
-
46
-
장고가 URL을 뷰에 매칭시키는 방법이 궁금하죠? 이 부분은 조금 어렵게 느껴질 수 있어요. 장고는 `regex`를 사용하는데, 이는 `정규표현식(regular expressions)`의 줄임말입니다. 정규식은 정말 (아주!) 많은 검색 패턴의 규칙을 가지고 있어요. 정규식은 어려운 내용이라 자세하게 알아보지 않을 거에요.
47
-
48
-
URL패턴 만드는 방법이 궁금하다면, 다음 표기법을 확인하세요. 이 중 몇 가지 규칙만 사용할 거에요.
49
-
50
-
* ^ : 문자열이 시작할 떄
51
-
* $ : 문자열이 끝날 때
52
-
* \d : 숫자
53
-
*+ : 바로 앞에 나오는 항목이 계속 나올 때
54
-
* () : 패턴의 부분을 저장할 때
55
-
56
-
이외에도 문자열을 이용해 url을 만들 수 있어요.
57
-
58
-
`http://www.mysite.com/post/12345/`라는 사이트가 있다고 합시다. 여기에서 `12345`는 글 번호를 의미합니다.
59
-
60
-
뷰마다 모든 글 번호을 일일이 매기는 것은 정말 힘들죠. 정규표현식으로 url패턴을 만들어 숫자값과 매칭되게 할 수 있어요. 이렇게 말이죠. `^post/(\d+)/$`. 어떤 뜻인지 하나씩 살펴봅시다.
61
-
62
-
***^post/** : url이(오른쪽부터) `post/`로 시작합니다.
63
-
***(\d+)** : 숫자(한 개 이상)가 있습니다. 이 숫자로 조회하고 싶은 게시글을 찾을 수 있어요.
64
-
***/** : `/`뒤에 문자가 있습니다.
65
-
***$** : url 마지막이 `/`로 끝납니다.
66
-
67
44
## 나의 첫 번째 Django url!
68
45
69
-
첫 번째 URL을 만들어 봅시다! 우리는 '<http://127.0.0.1:8000/>'가 홈페이지 주소로 만들어 글 목록이 보이게 만들어 볼 거에요.
46
+
첫 번째 URL을 만들어 봅시다! 'http://127.0.0.1:8000/' 주소를 블로그 홈 페이지로 지정하고 여기에 글 목록을 보여줄 거에요.
70
47
71
48
또한 `mysite/urls.py`파일을 깨끗한 상태로 유지하기 위해, `blog` 애플리케이션에서 메인 `mysite/urls.py`파일로 url들을 가져올 거에요.
72
49
73
-
먼저 `#`로 시작하는 줄을 삭제하고 `main url('')`로 `blog.urls`를 가져오는 행을 추가해 봅시다.
50
+
먼저 `blog.urls`를 가져오는 행을 추가해 봅시다. `blog.urls`를 가져오려면, `include` 함수가 필요합니다. `from django.urls `행을 찾아 `import` 뒤에 `include` 함수를 추가하세요.
74
51
75
52
이제 `mysite/urls.py` 파일은 아래처럼 보일 거에요.
76
53
77
54
{% filename %}mysite/urls.py{% endfilename %}
78
55
```python
79
-
from django.conf.urls import include, url
80
56
from django.contrib import admin
57
+
from django.urls import path, include
81
58
82
59
urlpatterns = [
83
-
url(r'^admin/', admin.site.urls),
84
-
url(r'', include('blog.urls')),
60
+
path('admin/', admin.site.urls),
61
+
path('', include('blog.urls')),
85
62
]
86
63
```
87
64
88
65
지금 장고는 http://127.0.0.1:8000/ 로 들어오는 모든 접속 요청을 `blog.urls`로 전송해 추가 명령을 찾을 거예요.
89
66
90
-
파이썬에서 정규 표현식을 작성할 때는 항상 문자열 앞에 `r`을 붙입니다. 이는 파이썬에게는 별 의미가 없지만, 파이썬에게 문자열에 특수 문자를 있다는 것을 알려줍니다.
91
-
92
67
## blog.urls
93
68
94
69
`blog/urls.py`이라는 새 파일을 생성하세요. 좋아요! 이제 아래 두 줄을 추가하세요.
95
70
96
71
{% filename %}blog/urls.py{% endfilename %}
97
72
```python
98
-
from django.conf.urls importurl
73
+
from django.urls importpath
99
74
from . import views
100
75
```
101
76
102
-
우리는 장고의 메소드와 `blog` 애플리케이션에서 사용할 모든 `views`를 불러오고 있어요. (물론 아직 뷰를 하나도 안 만들었지만, 곧 만들거니 조금만 기다리세요!)
77
+
여기서 장고 함수인 `path`와 `blog` 애플리케이션에서 사용할 모든 `views`를 가져왔어요. (물론 아직 뷰를 만들기 전이지만 일 분 내로 만들거에요!)
103
78
104
79
그 다음, 첫 번째 URL 패턴을 추가하세요.
105
80
106
81
{% filename %}blog/urls.py{% endfilename %}
107
82
```python
108
83
urlpatterns = [
109
-
url(r'^$', views.post_list, name='post_list'),
84
+
path('', views.post_list, name='post_list'),
110
85
]
111
86
```
112
87
113
-
이제 `post_list`라는 이름의 `view`가 `^$` URL에 할당되었습니다. 이 정규표현식은 `^`에서 시작해 `$`로 끝나는 지를 매칭할 것입니다. 즉 문자열이 아무것도 없는 경우만 매칭하겠죠. 틀린 것이 아니에요. 왜냐하면 장고 URL 확인자(resolver)는 '<http://127.0.0.1:8000/>' 는 URL의 일부가 아니기 때문입니다. 이 패턴은 장고에게 누군가 웹사이트에 '<http://127.0.0.1:8000/>' 주소로 들어왔을 때 `views.post_list`를 보여주라고 말할 거에요.
88
+
이제 `post_list`라는 `view`가 루트 URL에 할당되었습니다. 이 URL 패턴은 빈 문자열에 매칭이 되며, 장고 URL 확인자(resolver)는 전체 URL 경로에서 접두어(prefix)에 포함되는 도메인 이름(i.e. http://127.0.0.1:8000/)을 무시하고 받아들입니다. 이 패턴은 장고에게 누군가 웹사이트에 'http://127.0.0.1:8000/' 주소로 들어왔을 때 `views.post_list`를 보여주라고 말해줍니다.
114
89
115
90
마지막 부분인 `name='post_list'`는 URL에 이름을 붙인 것으로 뷰를 식별합니다. 뷰의 이름과 같을 수도 완전히 다를 수도 있습니다. 이름을 붙인 URL은 프로젝트의 후반에 사용할 거예요. 그러니 앱의 각 URL마다 이름 짓는 것은 중요합니다. URL에 고유한 이름을 붙여, 외우고 부르기 쉽게 만들어야 해요.
116
91
117
92
http://127.0.0.1:8000/ 접속했는데 '웹 페이지를 사용할 수 없음(web page not available)'이라는 메시지가 표시되었나요?. 이는 서버(`runserver`라고 입력하는 것을 기억 하는가?)가 실행되지 않았기 때문이에요. 에러가 발생한 이유를 찾으려면 서버 콘솔 창을 보세요.
118
93

119
94
120
-
콘솔에서 에러가 발생했네요. 하지만 걱정하지 마세요. 에러는 해결할 방법을 알려준답니다. : __no attribute 'post_list'__ 라는 메시지가 보일 텐데요. 이것은 장고가 찾고 사용하려고하는 *뷰*가 아직 없다는 거에요. 이 단계에서 `/admin/`로도 접속되지 않을 거에요. 앞으로 고쳐볼 테니 걱정하지 마세요.
95
+
콘솔에서 에러가 발생했네요. 하지만 걱정하지 마세요. 에러는 해결할 방법을 알려준답니다. : **no attribute 'post_list'** 라는 메시지가 보일거에요. 이 메시지는 장고가 찾고 사용하고자 하는 _뷰_가 아직 없다는 거에요. 이 단계에서 `/admin/`도 접속되지 않을 거에요. 앞으로 고쳐볼 테니 걱정하지 마세요. 혹시 여러분이 다른 에러 메시지를 보게 된다면, 웹 서버를 껐다 다시 켜보세요. 커맨드라인(혹은 콘솔)으로 가서 `Ctrl + C`를 눌러 웹 서버를 중단하면 됩니다. 다시 `python manage.py runserver` 명령어를 실행해 서버를 다시 시작하세요.
0 commit comments