Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
 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)
Beispiel #7
0
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')}
Beispiel #8
0
    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')
Beispiel #9
0
    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
Beispiel #10
0
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