예제 #1
0
def update(pid):
    ''''Update a post if the current user is the author.'''
    post = get_post(pid)

    if request.method == 'POST':
        title = request.form['title']
        body = request.form['body']
        error = None

        if not title:
            error = 'Title is required.'

        if error is not None:
            flash(error)
        else:
            query = 'UPDATE post SET title = ?, body = ? WHERE id = ?'
            dbinfo = getdbinfo()
            db = get_db()
            with dbinfo:
                with getsdk().trace_sql_database_request(dbinfo, query):
                    db.execute(query, (title, body, pid))
                    db.commit()
            return redirect(url_for('blog.index'))

    return render_template('blog/update.html', post=post)
예제 #2
0
def get_post(pid, check_author=True):
    '''Get a post and its author by id.
    Checks that the id exists and optionally that the current user is
    the author.
    :param pid: id of post to get
    :param check_author: require the current user to be the author
    :return: the post with author information
    :raise 404: if a post with the given id doesn't exist
    :raise 403: if the current user isn't the author
    '''

    query = 'SELECT p.id, title, body, created, author_id, username' \
            ' FROM post p JOIN user u ON p.author_id = u.id' \
            ' WHERE p.id = ?'
    dbinfo = getdbinfo()
    with dbinfo:
        with getsdk().trace_sql_database_request(dbinfo, query):
            post = get_db().execute(query, (pid, )).fetchone()

    if post is None:
        abort(404, "Post id {0} doesn't exist.".format(pid))

    if check_author and post['author_id'] != g.user['id']:
        abort(403)

    return post
예제 #3
0
def create():
    '''Create a new post for the current user.'''
    if request.method == "POST":
        title = request.form["title"]
        body = request.form["body"]
        error = None

        if not title:
            error = "Title is required."

        if error is not None:
            flash(error)
        else:
            query = "INSERT INTO post (title, body, author_id)" \
                    " VALUES (?, ?, ?)"
            dbinfo = getdbinfo()
            db = get_db()
            with dbinfo:
                with getsdk().trace_sql_database_request(dbinfo, query):
                    db.execute(
                        query,
                        (title, body, g.user["id"]),
                    )
                    db.commit()

            inform_editors()

            return redirect(url_for("blog.index"))

    return render_template("blog/create.html")
예제 #4
0
def login():
    """Log in a registered user by adding the user id to the session."""
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None

        sdk = getsdk()
        query = 'SELECT * FROM user WHERE username = ?'
        dbinfo = getdbinfo()
        with dbinfo:
            with sdk.trace_sql_database_request(dbinfo, query):
                user = db.execute(query, (username, )).fetchone()

        if user is None:
            error = 'Incorrect username.'
        elif not check_password_hash(user['password'], password):
            error = 'Incorrect password.'

        if error is None:
            # store the user id in a new session and return to the index
            session.clear()
            session['user_id'] = user['id']
            return redirect(url_for('index'))

        flash(error)

    return render_template('auth/login.html')
예제 #5
0
def register():
    """Register a new user.
    Validates that the username is not already taken. Hashes the
    password for security.
    """
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        db = get_db()
        error = None

        if not username:
            error = 'Username is required.'
        elif not password:
            error = 'Password is required.'
        elif db.execute('SELECT id FROM user WHERE username = ?',
                        (username, )).fetchone() is not None:
            error = 'User {0} is already registered.'.format(username)

        if error is None:
            query = 'INSERT INTO user (username, password) VALUES (?, ?)'
            dbinfo = getdbinfo()
            with dbinfo:
                with getsdk().trace_sql_database_request(dbinfo, query):
                    # the name is available, store it in the database and go to
                    # the login page
                    db.execute(query,
                               (username, generate_password_hash(password)))
                    db.commit()
            return redirect(url_for('auth.login'))

        flash(error)

    return render_template('auth/register.html')
예제 #6
0
def delete(pid):
    ''' Delete a Post '''
    dbinfo = getdbinfo()
    query = "DELETE FROM post WHERE id = ?"
    get_post(pid)
    db = get_db()
    with dbinfo:
        with getsdk().trace_sql_database_request(dbinfo, query):
            db.execute(query, (pid, ))
            db.commit()
    return redirect(url_for("blog.index"))
예제 #7
0
def index():
    ''' Create the Post Index '''
    query = "SELECT p.id, title, body, created, author_id, username" \
            " FROM post p JOIN user u ON p.author_id = u.id" \
            " ORDER BY created DESC"
    dbinfo = getdbinfo()
    with dbinfo:
        with getsdk().trace_sql_database_request(dbinfo, query):
            # Show all the posts, most recent first.
            db = get_db()
            posts = db.execute(query).fetchall()
    return render_template("blog/index.html", posts=posts)
예제 #8
0
def load_logged_in_user():
    """If a user id is stored in the session, load the user object from
    the database into ``g.user``."""
    user_id = session.get('user_id')

    if user_id is None:
        g.user = None
    else:
        sdk = getsdk()
        query = 'SELECT * FROM user WHERE id = ?'
        dbinfo = getdbinfo()
        with dbinfo:
            with sdk.trace_sql_database_request(dbinfo, query):
                g.user = get_db().execute(query, (user_id, )).fetchone()