View

View


참고


1. url

url conf란?

URLconf는 장고에서 URL과 일치하는 뷰를 찾기 위한 패턴들의 집합입니다.

클라이언트가 특정 페이지를 요청하기 위해 서버에 URL을 보내면 서버는 URLconf 모듈을 이용해 URL을 분석합니다.

URL/View 맵핑을 위해 사용하는 path 함수는 함수 내 변수로 주어진 URL과 요청받은 URL이 일치하면 특정 View를 호출합니다.

해당 내용은 urls.py 파일에 명시되어 있습니다.


url conf가 작동하는 방식

server를 돌리게 되면 settings.py에서 ROOT_URLCONF=’myite.urls’로 접근하여 해당 프로젝트의 urls로 이동합니다.

프로젝트 urls로 가서 path를 통해 admin에 접근하거나 app으로 접근할 수 있다(해당 urls를 확인합니다.)

app.urls로 접근하여 view로 이동하여 원하는 화면을 나타낼 수 있습니다.



2. view

view란?

필요한 데이터를 모델에서 가져와서 적절히 가공하여 웹 페이지 겨로가를 만들도록 컨트롤하는 역할을 합니다. 즉, 애플리케이션의 “로직”을 넣는 곳이라고 할 수 있습니다.


view의 종류

장고에선는 뷰 로직을 함수로 쾽할 것인지 클래스로 코딩할 것인지에 따라 아래와 같이 구분합니다.

  • 함수형 뷰(Function_based view)
  • 클래스형 뷰(Class-based view)

클래스형 뷰가 제너릭 뷰를 사용할 수 있고, 재활용, 확장성에서 유리하다고 하여 클래스형 뷰를 더 많이 사용하는 경향이 있습니다.



Generic view system

제네릭뷰란 장고에서 기본적으로 제공하고 있는 뷰의 형태로,개발할 때 자주 등장하는 내용을 모아놓은 뷰를 뜻합니다.

개발의 속도를 더욱 빠르게 만들어주어 편리하게 개발할 수 있다는 장점이 있습니다.

  • ListView : 조건에 맞는 객체들의 목록을 보여주는 뷰
  • DetailView : 조건에 맞는 하나의 세부 객체들을 보여주는 뷰
  • import 하는 법 : from django.views.generic import ListView, DetailView



3. view 실습(파이썬 웹프로그래밍 Django로 배우는 쉽고 빠른 웹개발, 실전편 참고)

기존 폴더에다가 하려다가 너무 복잡해서 새로 만들어서 진행했습니다.



mkdir pyDjango #원하는 곳에 만들었습니다.
cd pyDjango

python -m venv myenv

myenv\Scripts\activate

python -m pip install --upgrade pip

pip install django~=2.1.7

django-admin.py startproject mysite

mv mysite ch2   #이름이 헷갈려서 이름을 바꿨습니다.

python manage.py startapp bookmark  #settings.py에서 환경설정에서 bookmark추가해야 합니다.


1. 새로운 model 정의


from django.db import models

class Bookmark(models.Model):   #bookmark라는 클래스를 정의합니다.
    title = models.CharField(max_length=100, blank=True, null = True)   #title이라는 제목 필드를 작성합니다
    url = models.URLField('url',unique=True)        #url을 사용하기 위한 설정입니다.
    
    def __str__(self):
        return self.title   #이 메서드를 이용하지 않으면 장고의 기본이름이 입력되기 때문에 사용합니다.


#### 2. admin사이트에 테이블을 반영


from django.contrib import admin
from .models import Bookmark

class BookmarkAdmin(admin.ModelAdmin):
			#Bookmark클래스가 Admin사이트에서 어떤 모습을
			#보여줄 지에 대해 정의하는 클래스
    list_display = ('title', 'url')
			#title과 url을 화면에 출력한다

admin.site.register(Bookmark, BookmarkAdmin)
# Bookmark와 BookmarkAdmin클래스를 등록합니다

####테이블을 새로 만들 때는 models.py와 admin.py파일함께 수정한다.


#### 3. 데이터베이스 변경사항 반영


python manage.py makemigrations #마이그레이션파일이 생성됨
python manage.py migrate        #데이터베이스에 테이블을 만들어준다


4. 테이블 모습 확인


python manage.py createsuperuser

python manage.py runserver


5. 이번에는 mysite/urls.py에 path를 추가하겠습니다.


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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('bookmark/', include("bookmark.urls")) #include매소드를 이용하여 앱에 있는 urls로 이동합니다.
]


6. 앱에는 urls.py가 없으니 새로 만들고 다음 내용을 추가합니다.


from django.urls import path
from . import views
from .models import Bookmark
from django.views.generic import ListView, DetailView
urlpatterns = [
    path('', views.BookmarkLV.as_view(), name='index'),
		#뷰 클래스는 내장 함수를 반환하는 as_view() 클래스 메서드를 제공
    path('/', views.BookmarkDV.as_view(), name='detail'),
]

</code></pre>


#### 7. 해당 view 개발.


from django.shortcuts import render
from django.views.generic import ListView, DetailView   #제너릭 함수 이용합니다.
from .models import Bookmark

class BookmarkLV(ListView):
    model = Bookmark		#어떤 모델을 가져올 것인지 지정한다
    template_name = 'bookmark/bookmark_list.html'
			#템플릿 파일의 위치를 알려준다	

class BookmarkDV(DetailView):
    model = Bookmark		#어떤 모델을 가져올 것인지 지정한다
    template_name = 'bookmark/bookmark_detail.html'
			#템플릿 파일의 위치를 알려준다


#### 8. 템플릿에 반영 여기부터는 템플릿 개발을 하고 html에대해 공부해야되는데 아직 템플릿 발표를 못들어서 그냥 따라하도록 하겠습니다 - 해당 앱폴더에서 진행합니다 - `mkdir templates` - `cd templates` - `mkdir bookmark` - bookmark_detail.html과 bookmark_list.html을 만들어서 다음내용을 기입합니다.
**bookmark_list.html 코드** ```html

Bookmark List

    {%for bookmark in object_list %}
  • {% endfor %}
```
**bookmark_detail.html 코드** ```html

{{object.title}}

```
#### 9. Server 돌리고 확인.