Пример #1
0
def add_post():
    """
    Create a new post
    """
    if request.method == 'POST':

        # Create New Blog Post Object
        blog_post = BlogPost(title=request.form['title'],
                             text=request.form['text'],
                             author=users.get_current_user(),
                             url=clean_url(request.form['title']))

        # Create New Blog Post Categories
        post_categories = request.form['categories'].split(",")
        blog_post.categories = BlogCategory.add_categories(post_categories)

        # Save the new post
        blog_post.put()

        # Redirect
        sleep(1)
        return redirect(url_for('admin.posts'))
    # GET
    return render_template('blog/admin-posts-add.html',
                           categories=BlogCategory.query_all())
Пример #2
0
def add_post():
    """
    Create a new post
    """
    if request.method == 'POST':

        # Create New Blog Post Object
        blog_post = BlogPost(title=request.form['title'],
                             text=request.form['text'],
                             author=users.get_current_user(),
                             url=clean_url(request.form['title']))

        # Create New Blog Post Categories
        post_categories = request.form['categories'].split(",")
        blog_post.categories = BlogCategory.add_categories(post_categories)

        # Save the new post
        blog_post.put()

        # Redirect
        sleep(1)
        return redirect(url_for('admin.posts'))
    # GET
    return render_template('blog/admin-posts-add.html',
                           categories=BlogCategory.query_all())
Пример #3
0
def more_posts(page_num):
    """
    :param page_num: The number of pages/posts
    :return: AJAX more posts
    """
    offset = int(page_num * ELEMENTS_PER_PAGE)
    return render_template('blog/admin-posts-more.html',
                           posts=BlogPost.query().order(-BlogPost.date).fetch(
                               ELEMENTS_PER_PAGE, offset=offset))
Пример #4
0
def home(page):
    offset = (page - 1) * POSTS_PER_PAGE
    q = BlogPost.query().order(-BlogPost.date)
    posts = q.fetch(POSTS_PER_PAGE, offset=offset)
    all_posts = len(q.fetch())
    pagination = Pagination(page, POSTS_PER_PAGE, all_posts)
    response = make_response(render_template('front-index.html',
                                             posts=posts,
                                             pagination=pagination))
    return response
Пример #5
0
def posts():
    ''' Renders all posts'''
    if request.method == 'POST':

        # Get the Key, and delete() the object using Key (mandatory)
        ndb.Key('BlogPost', int(request.form['post_id'])).delete()
        time.sleep(1)

    return render_template('posts-view.html',
                           posts=BlogPost.query().order(-BlogPost.date))
Пример #6
0
def home(page):
    offset = (page - 1) * POSTS_PER_PAGE
    q = BlogPost.query().order(-BlogPost.date)
    posts = q.fetch(POSTS_PER_PAGE, offset=offset)
    all_posts = len(q.fetch())
    pagination = Pagination(page, POSTS_PER_PAGE, all_posts)
    response = make_response(
        render_template('front-index.html', posts=posts,
                        pagination=pagination))
    return response
Пример #7
0
def more_posts(page_num):
    """
    :param page_num: The number of pages/posts
    :return: AJAX more posts
    """
    offset = int(page_num * ELEMENTS_PER_PAGE)
    return render_template('blog/admin-posts-more.html',
                           posts=BlogPost.query()
                           .order(-BlogPost.date)
                           .fetch(ELEMENTS_PER_PAGE, offset=offset))
Пример #8
0
def posts(page_num):
    """
    GET --> Main post list
    POST --> Delete post
    """
    if request.method == 'POST':
        post = request.get_json()
        # Get the Key, and delete() the object using Key (mandatory)
        ndb.Key('BlogPost', int(post['objects'][0])).delete()
        logging.info("Deleted post: {}".format(post['objects'][0]))
        return "true"
    all_posts = BlogPost.query().order(-BlogPost.date).fetch(
        ELEMENTS_PER_PAGE * page_num)
    plus = False if len(all_posts) < (ELEMENTS_PER_PAGE * page_num) else True
    return render_template('blog/admin-posts.html', posts=all_posts, plus=plus)
Пример #9
0
def posts(page_num):
    """
    GET --> Main post list
    POST --> Delete post
    """
    if request.method == 'POST':
        post = request.get_json()
        # Get the Key, and delete() the object using Key (mandatory)
        ndb.Key('BlogPost', int(post['objects'][0])).delete()
        logging.info("Deleted post: {}".format(post['objects'][0]))
        return "true"
    all_posts = BlogPost.query().order(-BlogPost.date).fetch(ELEMENTS_PER_PAGE*page_num)
    plus = False if len(all_posts) < (ELEMENTS_PER_PAGE*page_num) else True
    return render_template('blog/admin-posts.html',
                           posts=all_posts, plus=plus)
Пример #10
0
def sitemap():
    """Generate sitemap.xml. Makes a list of urls and date modified."""
    pages = [['/', LAST_UPDATE]]

    # static pages
    for rule in main.app.url_map.iter_rules():
        if "GET" in rule.methods and len(rule.arguments) == 0 and not re.match(
                '(?:admin|static)', rule.endpoint):
            pages.append([rule.rule, LAST_UPDATE])

    # post model pages
    all_posts = BlogPost.query().order(-BlogPost.date).fetch()
    for single_post in all_posts:
        url = url_for('front.post', post_url=single_post.url)
        modified_time = single_post.date
        pages.append([url, modified_time])

    sitemap_xml = render_template('sitemap_template.xml', pages=pages)
    response = make_response(sitemap_xml)
    response.headers["Content-Type"] = "application/xml"

    return response
Пример #11
0
def clean_url(text, delim=u'-'):
    """
    Generates an ASCII-only slug.
    """
    result = []
    for word in PUNCTUATION.split(text.lower()):
        word = normalize('NFKD', word).encode('ascii', 'ignore')
        if word:
            result.append(word)

    url = unicode(delim.join(result))
    url_used = BlogPost.get_urls()

    # Checks if already a URL like this exists
    if url in url_used:
        num = 1
        middle_url = url+'-'+str(num)
        while middle_url in url_used:
            num += 1
            middle_url = url+'-'+str(num)
        return middle_url

    return url
Пример #12
0
def clean_url(text, delim=u'-'):
    """
    Generates an ASCII-only slug.
    """
    result = []
    for word in PUNCTUATION.split(text.lower()):
        word = normalize('NFKD', word).encode('ascii', 'ignore')
        if word:
            result.append(word)

    url = unicode(delim.join(result))
    url_used = BlogPost.get_urls()

    # Checks if already a URL like this exists
    if url in url_used:
        num = 1
        middle_url = url + '-' + str(num)
        while middle_url in url_used:
            num += 1
            middle_url = url + '-' + str(num)
        return middle_url

    return url
Пример #13
0
def sitemap():
    """Generate sitemap.xml. Makes a list of urls and date modified."""
    pages = [['/', LAST_UPDATE]]

    # static pages
    for rule in main.app.url_map.iter_rules():
        if "GET" in rule.methods and len(rule.arguments) == 0 and not re.match('(?:admin|static)', rule.endpoint):
            pages.append(
                [rule.rule, LAST_UPDATE]
            )

    # post model pages
    all_posts = BlogPost.query().order(-BlogPost.date).fetch()
    for single_post in all_posts:
        url = url_for('front.post', post_url=single_post.url)
        modified_time = single_post.date
        pages.append([url, modified_time])

    sitemap_xml = render_template('sitemap_template.xml', pages=pages)
    response = make_response(sitemap_xml)
    response.headers["Content-Type"] = "application/xml"

    return response
Пример #14
0
def post(post_url):
    single_post = BlogPost.query(BlogPost.url == post_url).get()
    return render_template('front-post.html',
                           post=single_post)
Пример #15
0
def post(post_url):
    single_post = BlogPost.query(BlogPost.url == post_url).get()
    return render_template('front-post.html', post=single_post)