[app.py]

from flask_login import (LoginManager, login_user, logout_user,
                             login_required, current_user)
...
 
@app.before_request
def before_request():
    """Connect to the database before each request."""
    g.db = models.DATABASE
    g.db.connect()
    g.user = current_user
 
...
 
@app.route('/new_post', methods=['GET', 'POST'])
@login_required
def post():
    form = forms.PostForm()
    if form.validate_on_submit():
        models.Post.create( user=g.user._get_current_object(), 
                            content=form.content.data.strip())
        flash("Message posted successfully!", "success")
        return redirect(url_for('index'))
    return render_template('post.html', form=form)
 

g.user = current_user
Make current user available globally, everytime we connect to the database, using the g object.

user=g.user._get_current_object()
A function available for the user

 

[post.html]

{% extends "layout.html" %}
{% from 'macros.html' import render_field %}

{% block content %}
  <form method="POST" action="">
  {{ form.hidden_tag() }}
  {% for field in form %}
    {{ render_field(field) }}
  {% endfor %}
  <button type="submit" id="submit">Post!</button>
</form>
{% endblock %}

[layout.html]

<nav>
  <a href="{{ url_for('index') }}">All </a>
  {% if current_user.is_authenticated %}
  <a href="{{ url_for('post') }}" class="new">Create New Post </a>
  {% endif %}
</nav>