2010년 6월 7일 월요일

13 - 1) Bookmark 작성하기

먼저 다음과 같이 북마크 등록에 사용될 폼을 작성해 봅시다.

 

  1. myTest/BookmarkSaveForm.py
  2. # -*- coding: utf-8 -*-
  3. from django import forms

  4. class BookmarkSaveForm(forms.Form):
  5.    url = forms.URLField( label = '주소', widget=forms.TextInput(attrs={'size':64}) )
  6.    title = forms.CharField( label = '제목', widget=forms.TextInput(attrs={'size':64}) )
  7.    tags = forms.CharField( label = '태그', widget=forms.TextInput(attrs={'size':64}), required=False )

 

BookmarkSaveForm()은 주소, 제목, 태그 총 세 개의 사용자 입력을 받습니다.

TextInput에 공히 사용된 attr={'size':64} 는 화면상에 나타날 길이 속성을 의미합니다.

자 이에 이 Form과 함께 사용될 View 를 작성해 봅시다.

 

  1. views.py
  2. from webDB.myTest.BookmarkSaveForm import *

  3. from webDB.myTest.models import *


  4. def bookmark_save_page(request):

  5.    if request.method == "POST" :

  6.        form = BookmarkSaveForm(request.POST)

  7.        if form.is_valid() :

  8.            link, dummy = Link.objects.get_or_create(

  9.                                                     url = form.cleaned_data['url']

  10.                                    )

  11.            bookmark, created = Bookmark.objects.get_or_create(

  12.                                                     user = request.user,

  13.                                                      link = link

  14.                                    )

  15.            bookmark.title = form.cleaned_data['title']

  16.            if not created :

  17.                bookmark.tag_set.clear()

  18.            tag_names = form.cleaned_data['tags'].split()

  19.            for tag_name in tag_names :

  20.                tag, dummy = Tag.objects.get_or_create(name=tag_name)

  21.                bookmark.tag_set.add(tag)

  22.            bookmark.save()

  23.            return HttpResponseRedirect('/home/%s/' % request.user.username)

  24.    else :

  25.        form = BookmarkSaveForm()

  26.        variables = RequestContext(request, {'form' : form})

  27.    return render_to_response('bookmark_save.html', variables)  

 

화면상에 보여줄 template을 만들어 보도록 하겠습니다.

template 디렉토리에 아래에 bookmark_save.html 로 다음의 코드를 작성해 주세요.

 

  1. template/bookmark_save.html
  2. {% extends "base.html" %}
  3. {% block title %} 북마크를 저장하세요 {% endblock %}
  4. {% block head %} 북마크를 저장하세요 {% endblock %}
  5. {% block content %}
  6. <form method="post" action=".">
  7.        {{form.as_p}}
  8.        <input type="submit" value="북마크 저장" />
  9. </form>
  10. {% endblock %}

 

 

사용자의 url 요청을 통해 이제까지 작성된 내용을 보여줄 수 있도록 urls.py에 다음을 추가합니다.

 

  1. urls.py
  2. ...
  3. (r'^save/$', bookmark_save_page),
  4. ...

 

 

서버를 가동시켜 이상의 내용을 확인해 봅시다.

> python manage.py runserver 8888

 

shot01.png

 

 

위의 Form에

주소 : http://www.djangoproject.com

제목 : Django 홈페이지

태그 : django homepage

라고 입력하고 북마크 저장을 눌러봅시다.

현재는 저장된 Bookmark를 보여주는 페이지가 없으니 다음과 같이 Shell에서 확인해 봅시다.

 

> python manage.py shell
>>> from webDB.myTest.models import *
>>> bookmark = Bookmark.objects.get(id=1)
>>> bookmark
<Bookmark: test1, http://www.djangoproject.com/>
>>> bookmark.link.url
u'http://www.djangoproject.com/'
<Bookmark: test1, http://www.djangoproject.com/>
>>> bookmark.title
u'Django \ud648\ud398\uc774\uc9c0'

>>> tag = Tag.objects.get(id=1)

>>> tag

<Tag: django>

>>> bookmark.tag_set.all()
[<Tag: django>, <Tag: homepage>]

>>> tag.bookmarks.all()
[<Bookmark: test1, http://www.djangoproject.com/>]

 

 

다음 시간에는 우리가 지금 생성해 놓은 Bookmark를 웹에서 살펴보는 것을 만들어 보겠습니다.

수고하셨습니다.

 

 

학습활동
  1. 앞서 base.html에 보시면 로그인, 로그아웃 등의 Link 버튼을 보여주는 Navigation 부분이 있습니다. 이 Navigation에 사용자가 로그인 되어 있을 때만 "북마크 추가" 라는 Link를 생성하여 save/ 페이지로 연결되게 합시다.
    shot01(1).png

  2. 로그인한 사용자만 북마크를 생성하는 페이지(사용자의 URL 요청이 save 일 때  bookmark_save_page 뷰가 실행되는 페이지)에 접근하도록 view를 변경해 봅니다.

 

이 글은 스프링노트에서 작성되었습니다.

댓글 없음:

댓글 쓰기