View
참고
- 파이썬 웹프로그래밍 Django(장고)로 배우는 쉽고 빠른 웹개발
- 파이썬 웹프로그래밍 Django(장고)로 배우는 쉽고 빠른 웹개발, 실전편
- html기본배우기
- 전체적인 구조
- 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_detail.html 코드**
```html
{{object.title}}
- URL: {{object.url}}
```
#### 9. Server 돌리고 확인.