[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>