def post(self, request, *args, **kwargs): key = kwargs.get('post_key') post = Post.get(key) if post is None: raise Http404 form = PostForm(request.POST, request=request, instance=post) if form.is_valid(): post = form.save(commit=True) if post.title: msg = "Blog post %s have been edited" % post.title msg += post.published and " and published" or "." else: msg = "Blog post have been edited." next = form.cleaned_data.get('next') if next == 'dashboard' or not next: messages.info(request, msg) return HttpResponseRedirect(reverse('post_dashboard')) if next == 'here': messages.info(request, msg) return HttpResponseRedirect(reverse('edit_post', kwargs={'post_key': str(post.key())})) if next == 'preview': return HttpResponseRedirect(reverse('preview_post', kwargs={'post_key': str(post.key())})) else: ctx = RequestContext(request) ctx['form'] = form ctx['post'] = post return render_to_response(self.template_name, {}, context_instance=ctx)
def get(self, request, *args, **kwargs): post_key = kwargs.get('post_key') ctx = RequestContext(request) query = Post.get(post_key) if not query: raise Http404 ctx['post'] = query return render_to_response('posts/show_post.html', {}, context_instance=ctx)
def get(self, request, *args, **kwargs): post_slug = kwargs.get('post_slug') ctx = RequestContext(request) query = Post.all().filter('published = ', True).filter('slug = ', post_slug).fetch(1) if not query: raise Http404 ctx['post'] = query[0] return render_to_response('posts/show_post.html', {}, context_instance=ctx)
def get(self, request, *args, **kwargs): ctx = RequestContext(request) query = Post.all().filter('published = ', True).order('-date_published') paginator = create_paginator(request=request, query=query) ctx['paginator'] = paginator ctx['per_page'] = paginator.per_page return render_to_response('posts/main_page.html', {}, context_instance=ctx)
def get(self, request, *args, **kwargs): ctx = RequestContext(request) query = Post.all() paginator = create_paginator(request=request, query=query, \ possible_ordering=["title", "published", "date_created", "last_edited"]) ctx['paginator'] = paginator return render_to_response('posts/dashboard.html', {}, context_instance=ctx)
def get(self, request, *args, **kwargs): key = kwargs.get('post_key') post = Post.get(key) if post is None: raise Http404 form = PostForm(request=request, instance=post) ctx = RequestContext(request) ctx['form'] = form ctx['post'] = post return render_to_response(self.template_name, {}, context_instance=ctx)
def delete_post(request, post_key=None): if request.method != 'POST': return {'status': 'error', 'msg': 'only_post', 'code': 405} if post_key is None: return {'status': 'error', 'msg': 'post_id_not_provided', 'code': 400} post = Post.get(post_key) if post is None: return {'status': 'error', 'msg': 'post_not_found', 'code': 404} post.delete() return {'status': 'OK', 'msg': reverse('post_dashboard')}
def clean_slug(self): slug = self.cleaned_data.get('slug') if slug is not None: c = Post.all().filter('slug = ', slug).get() if c: if self.instance is None: raise forms.ValidationError('Slug already taken') else: if c.key() != self.instance.key(): raise forms.ValidationError('Slug already taken') return self.cleaned_data.get('slug')
def save(self, commit=False): clean_d = self.cleaned_data if self.instance is None: self.instance = Post() self.instance.title = clean_d['title'] self.instance.intro = clean_d['intro'] self.instance.slug = clean_d['slug'] self.instance.content = clean_d['content'] if self.instance.user is None: self.instance.user = self.request.user if self.instance.published == False and clean_d['public'] \ and not self.instance.date_published: self.instance.date_published = datetime.datetime.now() self.instance.published = clean_d['public'] if commit: self.instance.put() return self.instance
class PostForm(forms.Form): content = forms.CharField(widget=forms.Textarea(attrs={'rows': 50, 'cols': 50}), required=False, help_text="Content of post. Separate paragras with at least 1 empty line.") title = forms.CharField(required=False, help_text="Title of post") slug = forms.SlugField(required=False, help_text="Slug for post, will be used in post url") intro = forms.CharField(widget=forms.Textarea(attrs={'rows': 5, 'cols': 50}), \ required=False, help_text="Introduction, first paragraph") public = forms.BooleanField(required=False, \ help_text="Check it, if you want to publish post") next = forms.CharField(widget=forms.HiddenInput(), required=False) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request') self.instance = kwargs.pop('instance') super(PostForm, self).__init__(*args, **kwargs) self.init_from_instance() def init_from_instance(self): if self.instance is not None: self.fields['title'].initial = self.instance.title self.fields['intro'].initial = self.instance.intro self.fields['slug'].initial = self.instance.slug self.fields['content'].initial = self.instance.content self.fields['public'].initial = self.instance.published def clean_slug(self): slug = self.cleaned_data.get('slug') if slug is not None: c = Post.all().filter('slug = ', slug).get() if c: if self.instance is None: raise forms.ValidationError('Slug already taken') else: if c.key() != self.instance.key(): raise forms.ValidationError('Slug already taken') return self.cleaned_data.get('slug') def clean(self): cleaned_data = super(PostForm, self).clean() public = cleaned_data.get("public") if public: content = cleaned_data.get('content') title = cleaned_data.get('title') intro = cleaned_data.get('intro') slug = cleaned_data.get('slug') if content is None or title is None \ or intro is None or slug is None: raise forms.ValidationError("If you want to publish article... everything required") return cleaned_data def save(self, commit=False): clean_d = self.cleaned_data if self.instance is None: self.instance = Post() self.instance.title = clean_d['title'] self.instance.intro = clean_d['intro'] self.instance.slug = clean_d['slug'] self.instance.content = clean_d['content'] if self.instance.user is None: self.instance.user = self.request.user if self.instance.published == False and clean_d['public'] \ and not self.instance.date_published: self.instance.date_published = datetime.datetime.now() self.instance.published = clean_d['public'] if commit: self.instance.put() return self.instance