전체 페이지뷰

2016년 11월 28일 월요일

Bookmark 앱 만들기1

사이트에 일단 bookmark를 추가해 보겠습니다.
그 전에, 어떤 모습으로 만들지 UI, 접속을 위한 URL, 서버에서 필요한 데이터 로직 등을 설계해야 하나 저는 아직 배우는 단계이므로 텍스트 위주의 북마크가 될 것입니다.


Bookmark List 화면이 뜨고 개별 항목을 클릭하면 연결되는 가장 간단한 모습입니다.

그럼 이제 가장 먼저 Admin 사이트에 로그인 하기 위한 슈퍼유저를 만들겠습니다.
virtualenv 가 activate되었는가를 확인하고,

콘솔창에서 프로젝트가 생성된 폴더에서

(myvenv) D:\myDjango> python manage.py createsuperuser
를 입력하면 슈퍼유저를 설정하기 위한 추가 입력 사항이 나타납니다.
먼저 ID를 입력하고, E-mail과 password를 입력하면 끝납니다.
패스워드는 8자 이상, 숫자로만 이루어져서는 안 되고, 지나치게 반복적이어서도 안 됩니다.
그리고, 패스워드를 누를때 커서는 움직이지 않으니 키가 안 먹는다고 이상하다 생각하지 말고 그냥 누르고 엔터를 치면 됩니다.

이렇게 해서 관리자가 설정되었고, 다음으로 북마크 앱을 만들도록 명령하겠습니다.

python manage.py startapp bookmark
그러면 폴더 내에 bookmark라는 하위 폴더가 생겨납니다. 그리고 그 안에 역시 __init__, admin, apps, models, tests, views 등의 파이썬 파일과 migrations라는 폴더가 생성되어 있습니다.

이제 이 생성된 bookmark를 settings.py에 등록해 주어야 합니다.

settings.py 파일을 열고, 중단에
1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bookmark.apps.BookmarkConfig',
]
cs
부위를 찾아 위와 같이 수정해 줍니다.

이제 모델 개발 차례입니다.

북마크 앱의 테이블을 정의해주어야 합니다.
북마크 폴더의 models.py 파일을 열어보면,
1
from django.db import models
cs
만 덜렁 존재합니다.
다음과 같이 수정해 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from __future__ import unicode_literals  #Python 2.x 지원용
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
# Create your models here.
@python_2_unicode_compatible    #Python 2.x 지원용
class Bookmark(models.Model):
    title = models.CharField(max_length=100, blank=True, null=True)
    url = models.URLField('url', unique=True)
    def __str__(self):
        return self.title
cs

처음 보는 것들이 좀 있습니다.
1
from __future__ import unicode_literals  #Python 2.x 지원용
cs
파이썬2는 byte, 파이썬 3는 유니코드를 문자열의 기본으로 합니다.
저는 3를 사용할 것이기 때문에 위와 같은 장치를 써서 파이썬 2 환경에서는 장고가 알아서 변환해 주도록 하는 것입니다. python_2와 관련된 코드들은 다 이를 위한 것입니다.

장고에서는 테이블을 하나의 클래스로 설정하고(위의 Bookmark 클래스)
테이블의 컬럼은 클래스의 변수(위의 title, url)로 매핑합니다.

클래스는 django.db.models.Model 클래스를 상속받아 사용하고, 클래스 변수의 타입도 이미 장고에서 정해둔 바를 따릅니다. 위에 보면 title은 CharField, url은 URLField를 사용하고 있습니다.

1
@python_2_unicode_compatible    #Python 2.x 지원용
cs

@표시와 함께 decorator 처리가 되어있습니다.
decorator는 소스 코드를 바꾸지 않고 사용하고 있는 함수를 수정하고 싶을 때 사용합니다.
다시말해 뒤에 있는 함수를 인자로 받아 그 함수의 값을 취해서 다른 함수를 반환한다는 것입니다. 장고 모델 내에 아마 python_2_unicode_compatible이라는 데코레이터가 정의되어 있을 것입니다. 만약 python2.x 버젼을 만나면 python3로 작성된  바로 하방의 bookmark 클래스 내부의 __str__() 함수를 받아 python2 문법에 맞는 함수로 고쳐줄 것이라 생각됩니다.(__str__함수는 객체를 문자열로 표현할 때 사용됩니다. 차차 보게 될 admin 사이트 등에서 테이블 명을 보여주는 등에 쓰입니다.)

이제 북마크의 model.py를 변경했으니, 이 테이블을 admin 사이트에 보이도록 등록해야 합니다.

bookmark 폴더로 이동해서
(myvenv) D:\myDjango\bookmark> subl admin.py
admin.py  파일을 텍스트 에디터로 엽니다.(제 경우엔  서브라임 텍스트)

그러면
1
2
3
4
from django.contrib import admin
# Register your models here.Colored by Color Scripter
cs
가 보입니다.

이 파일을
1
2
3
4
5
6
7
8
9
from django.contrib import admin
from bookmark.models import Bookmark
# Register your models here.
class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('title''url')
admin.site.register(Bookmark,BookmarkAdmin)
cs
와 같이 수정해 줍니다.

여기서 BookmarkAdmin 클래스는 Bookmark 클래스가 Admin사이트에서 어떻게 보여줄지를 정의하는 클래스입니다. 그 클래스에 title과 url을 보여주라고 지정해 준 것입니다.

그리고 이어서 admin.site.register() 함수를 사용해서 Bookmark와 BookmarkAdmin 클래스를 등록합니다.

테이블의 정의 변경이 있었으므로 migrate 명령으로 데이터베이스에 반영합니다.

bookmark 폴더에서 하나 위로 이동해
(myvenv) D:\myDjango>python manage.py makemigrations
Migrations for 'bookmark':
  bookmark\migrations\0001_initial.py:
    - Create model Bookmark

(myvenv) D:\myDjango>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, bookmark, contenttypes, sessions
Running migrations:
  Applying bookmark.0001_initial... OK

위의 두 명령과 그에 따른 메세지를 보면 bookmark 폴더 내에 migrations 폴더를 만들고 그 안에 Bookmark 모델을 생성한 후변경 내용을 적용하는 것을 볼 수 있습니다.

이제 지금까지의 작업 내용을 확인해 보겠습니다.
python manage.py runserver
하여 보여지는 주소를 브라우저에 붙여 넣으면

성공적으로 가동됩니다. 이제 주소창에 보여지는 주소 옆에
/admin 을 덧붙여주고 엔터하면...


admin 창이 뜹니다. 먼저 설정한 이름과 암호를 쳐 넣으면,

Admin 창이 뜨는 것을 알 수 있습니다.
Bookmarks 옆의 +Add 버튼을 눌러보면


우리가 Bookmark display에 설정했던 title,url의 항목이 뜨는 것을 알수 있습니다.

CTRL + Break를 눌러서 서버를 멈춥니다.




댓글 없음:

댓글 쓰기