먼저 다음과 같이 북마크 등록에 사용될 폼을 작성해 봅시다.
- myTest/BookmarkSaveForm.py
- # -*- coding: utf-8 -*-
- from django import forms
- class BookmarkSaveForm(forms.Form):
- url = forms.URLField( label = '주소', widget=forms.TextInput(attrs={'size':64}) )
- title = forms.CharField( label = '제목', widget=forms.TextInput(attrs={'size':64}) )
- tags = forms.CharField( label = '태그', widget=forms.TextInput(attrs={'size':64}), required=False )
BookmarkSaveForm()은 주소, 제목, 태그 총 세 개의 사용자 입력을 받습니다.
TextInput에 공히 사용된 attr={'size':64} 는 화면상에 나타날 길이 속성을 의미합니다.
자 이에 이 Form과 함께 사용될 View 를 작성해 봅시다.
- views.py
-
from webDB.myTest.BookmarkSaveForm import *
from webDB.myTest.models import *
def bookmark_save_page(request):
if request.method == "POST" :
form = BookmarkSaveForm(request.POST)
if form.is_valid() :
link, dummy = Link.objects.get_or_create(
url = form.cleaned_data['url']
)
bookmark, created = Bookmark.objects.get_or_create(
user = request.user,
link = link
)
bookmark.title = form.cleaned_data['title']
if not created :
bookmark.tag_set.clear()
tag_names = form.cleaned_data['tags'].split()
for tag_name in tag_names :
tag, dummy = Tag.objects.get_or_create(name=tag_name)
bookmark.tag_set.add(tag)
bookmark.save()
return HttpResponseRedirect('/home/%s/' % request.user.username)
else :
form = BookmarkSaveForm()
variables = RequestContext(request, {'form' : form})
return render_to_response('bookmark_save.html', variables)
화면상에 보여줄 template을 만들어 보도록 하겠습니다.
template 디렉토리에 아래에 bookmark_save.html 로 다음의 코드를 작성해 주세요.
- template/bookmark_save.html
- {% extends "base.html" %}
- {% block title %} 북마크를 저장하세요 {% endblock %}
- {% block head %} 북마크를 저장하세요 {% endblock %}
- {% block content %}
- <form method="post" action=".">
- {{form.as_p}}
- <input type="submit" value="북마크 저장" />
- </form>
- {% endblock %}
사용자의 url 요청을 통해 이제까지 작성된 내용을 보여줄 수 있도록 urls.py에 다음을 추가합니다.
- urls.py
- ...
- (r'^save/$', bookmark_save_page),
- ...
서버를 가동시켜 이상의 내용을 확인해 봅시다.
> python manage.py runserver 8888
위의 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를 웹에서 살펴보는 것을 만들어 보겠습니다.
수고하셨습니다.
학습활동
-
앞서 base.html에 보시면 로그인, 로그아웃 등의 Link 버튼을 보여주는 Navigation 부분이 있습니다. 이 Navigation에 사용자가 로그인 되어 있을 때만 "북마크 추가" 라는 Link를 생성하여 save/ 페이지로 연결되게 합시다.
-
로그인한 사용자만 북마크를 생성하는 페이지(사용자의 URL 요청이 save 일 때 bookmark_save_page 뷰가 실행되는 페이지)에 접근하도록 view를 변경해 봅니다.
이 글은 스프링노트에서 작성되었습니다.
댓글 없음:
댓글 쓰기