# Django View & URL (1)

## View

여기서 View는 다른 MVC Framework에서 말하는 Controller와 비슷한 역할을 한다. 즉, 애플리케이션의 **로직**을 넣는 곳이다. 모델에서 필요한 정보를 받아와 template에 전달하는 역할을 한다.

* `app/view.py`

```python
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world")
```

가장 간단한 형태의 view이다. View를 호출하기 위해서 URLconf를 이용해 연결한다.

## Url

URLconf를 생성하기 위해서 app에 `urls.py` 파일을 생성한다.

```
app
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
├── urls.py
└── views.py
```

### app/urls.py

```python
from django.urls import path

from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
]
```

### project/urls.py

최상위 URLconf(프로젝트 생성시 생긴 `urls.py`)에서 애플리케이션의 url을 바라보게 설정한다.

```python
from django.contrib import admin
from django.urls import include,path

urlpatterns = [
        path('app/', include('app.urls')),
    path('admin/', admin.site.urls),
]
```

```python
"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
```

주석으로 urlpatterns에 대한 설명이 있다.

* `Include()` : 다른 URLconf를 참조할 수 있도록 한다.

  ```
  path('사용자지정경로', include(url Conf module))
  ```

  다음과 같이 urlConf 모듈이 존재하면 앞의 path 설정에는 아무 경로에 연결하더라도 작동한다.

```bash
$ python manage.py runserver
```

서버를 실행시킨 후 `http://localhost:8000/app/` 연결한 경로에 들어가면 View에서 설정한 화면이 나오는 것을 확인할 수 있다.

* `path()`

```
path(route, view,kwargs=None, name=None)
```

* route : URL 패턴을 가진 문자열이다. urlpatterns 의 첫번째 패턴부터 시작해, 일치하는 패턴을 찾을 때까지 요청된 url을 각 패턴을 순서대로 비교한다.
* view : 일치하는 패턴을 찾으면 HttpRequest 객체를 첫번째 인수로 하고, view 함수를 호출한다.
* name : URL에 이름을 지으면, 템플릿을 포함한 장고 어디에서든 명확하게 참조할 수 있다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dahye-jeong.gitbook.io/django/basic/2019-03-06-view.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
