def post(self): user = users.get_current_user() title = self.request.get('title') body = db.Text(self.request.get('body')) post_id = self.request.get('post_id') if post_id: post = Post.get_by_id(int(post_id)) if post.author != user: self.generate('error.html', { 'error_message': 'You don’t have permission to edit that post', 'page_title': 'Error'}) return post.title = title post.body = body else: post = Post(title=title, body=body, author=user) post.html = Markdown(post.body.encode('utf-8')).decode('utf-8') post.put() self.redirect('/home')
def post(self): """ Create new post """ json = {} if not self.current_user: json = { 'error': 1, 'msg': self._('Access denied') } self.write(json) return type = self.get_argument('type', Post.TYPE_POST) title = self.get_argument('title', None) content = self.get_argument('content', '') slug = self.get_argument('slug', None) format = self.get_argument('format', 'standard') excerpt = self.get_argument('excerpt', '') thumbnail = self.get_argument('thumbnail', '') category_id = self.get_argument('category', None) tags = self.get_argument('tags', '') date = self.get_argument('date', None) comment_open = bool(int(self.get_argument('comment_open', '1'))) if type not in [Post.TYPE_POST, Post.TYPE_PAGE]: type = Post.TYPE_POST if format not in ['standard', 'aside', 'gallery', 'link', 'image', 'quote', 'status', 'video', 'audio', 'chat']: format = 'standard' # valid arguments if not slug: json = { 'error': 1, 'msg': self._('Slug field can not be empty') } self.write(json) return elif self.get_post_by_slug(slug): json = { 'error': 1, 'msg': self._('Slug already exists') } self.write(json) return if type == Post.TYPE_POST and not category_id: json = { 'error': 1, 'msg': self._('Category field can not be empty') } self.write(json) return if type == Post.TYPE_POST: category = self.get_category_by_id(category_id) if not category: json = { 'error': 1, 'msg': self._('No such category') } self.write(json) return if date: if validators.date(date): date = datetime.strptime(date, '%Y-%m-%d') elif validators.datetime(date): date = datetime.strptime(date, '%Y-%m-%d %H:%M:%S') else: date = datetime.utcnow() else: date = datetime.utcnow() # now create post post = Post() post.type = type post.created = date post.title = title post.slug = slug post.content = content post.html = wrap_content(content) post.format = format post.excerpt = excerpt post.thumbnail = thumbnail post.comment_open = comment_open if type == Post.TYPE_POST: post.category_id = category.id else: post.category_id = 1 # default category # update category post count if type == Post.TYPE_POST: category.post_count += 1 self.db.add(category) # commit self.db.add(post) self.db.commit() # create tags if type == Post.TYPE_POST and tags: post.tag_ids = self.create_tags(tags.split(','), post.id) self.db.add(post) self.db.commit() # delete cache keys = ['PostList:1', 'CategoryPostList:%s:1' % category.id, 'SystemStatus', 'ArchiveHTML', 'TagCloud'] self.cache.delete_multi(keys) json = { 'error': 0, 'msg': self._('Successfully created'), 'post': { 'post': { 'id': post.id, 'title': post.title, 'slug': post.slug, 'format': post.format, 'excerpt': post.excerpt, 'thumbnail': post.thumbnail, 'created': post.created.strftime('%Y-%m-%d %H:%M'), 'updated': post.updated.strftime('%Y-%n-%d %H:%M'), 'views': post.views, 'permalink': post.permalink } } } if type == Post.TYPE_POST: json['category'] = { 'id': category.id, 'title': category.title, 'slug': category.slug, 'description': category.description, 'permalink': category.permalink, 'post_count': category.post_count } self.write(json)