Rewrite new_pin into a Class Based View

This commit is contained in:
Krzysztof Klimonda
2013-02-24 16:56:03 +01:00
parent b349c0e3ff
commit 98bdbfd900
4 changed files with 33 additions and 29 deletions

View File

@@ -1,15 +1,15 @@
from django import forms from django import forms
from taggit.forms import TagField
from .models import Pin from .models import Pin
class PinForm(forms.Form): class PinForm(forms.ModelForm):
url = forms.CharField(label='URL', required=False) url = forms.CharField(label='url', required=False)
image = forms.ImageField(label='or Upload', required=False) image = forms.ImageField(label='or Upload', required=False)
description = forms.CharField(label='Description', required=False, widget=forms.Textarea)
tags = TagField() class Meta:
model = Pin
fields = ['url', 'description', 'tags']
def check_if_image(self, data): def check_if_image(self, data):
# Test file type # Test file type

View File

@@ -1,9 +1,12 @@
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from .views import RecentPins
from .views import NewPin
urlpatterns = patterns('pinry.pins.views', urlpatterns = patterns('pinry.pins.views',
url(r'^$', 'recent_pins', name='recent-pins'), url(r'^$', RecentPins.as_view(), name='recent-pins'),
url(r'^tag/.+/$', 'recent_pins', name='tag'), url(r'^tag/.+/$', RecentPins.as_view(), name='tag'),
url(r'^new-pin/$', 'new_pin', name='new-pin'), url(r'^new-pin/$', NewPin.as_view(), name='new-pin'),
url(r'^delete-pin/(?P<pin_id>\d+)/$', 'delete_pin', name='delete-pin'), url(r'^delete-pin/(?P<pin_id>\d+)/$', 'delete_pin', name='delete-pin'),
) )

View File

@@ -1,33 +1,34 @@
from django.template.response import TemplateResponse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib import messages from django.contrib import messages
from django.utils.functional import lazy
from django.views.generic.base import TemplateView
from django.views.generic import CreateView
from .forms import PinForm from .forms import PinForm
from .models import Pin from .models import Pin
def recent_pins(request): reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)
return TemplateResponse(request, 'pins/recent_pins.html', None)
def new_pin(request): class RecentPins(TemplateView):
if request.method == 'POST': template_name = 'pins/recent_pins.html'
form = PinForm(request.POST, request.FILES)
if form.is_valid():
pin = Pin.objects.create(url=form.cleaned_data['url'], submitter=request.user, class NewPin(CreateView):
description=form.cleaned_data['description']) model = Pin
pin.tags.add(*form.cleaned_data['tags']) form_class = PinForm
messages.success(request, 'New pin successfully added.') success_url = reverse_lazy('pins:recent-pins')
return HttpResponseRedirect(reverse('pins:recent-pins'))
else: def form_valid(self, form):
messages.error(request, 'Pin did not pass validation!') form.instance.submitter = self.request.user
else: messages.success(self.request, 'New pin successfully added.')
form = PinForm() return super(NewPin, self).form_valid(form)
context = {
'form': form, def form_invalid(self, form):
} messages.error(self.request, 'Pin did not pass validation!')
return TemplateResponse(request, 'pins/new_pin.html', context) return super(NewPin, self).form_invalid(form)
def delete_pin(request, pin_id): def delete_pin(request, pin_id):