Bu bölümde sahte blog gönderileri kaldırılarak gerçek gönderiler ekleme desteği kazandırılacak, tüm kullanıcıların gönderilerini gösteren bir "Explore" sayfası oluşturulacak ve uzun listelerin yönetimi için sayfalama (pagination) özelliği uygulanacak.
app/forms.py — Post Formu Ekleclass PostForm(FlaskForm):
post = TextAreaField('Say something', validators=[
DataRequired(), Length(min=1, max=140)])
submit = SubmitField('Submit')
app/templates/index.html — Gönderi Formunu Ekle{% extends "base.html" %}
{% block content %}
<h1>Hi, {{ current_user.username }}!</h1>
{% if form %}
<form action="" method="post">
{{ form.hidden_tag() }}
<p>
{{ form.post.label }}<br>
{{ form.post(cols=32, rows=4) }}<br>
{% for error in form.post.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
{% endif %}
{% for post in posts %}
{% include '_post.html' %}
{% endfor %}
{% endblock %}
{% if form %} — form argümanı gönderilmediğinde (Explore sayfasında) şablon çökmez.app/routes.py — Index View Fonksiyonunu Güncellefrom app.forms import PostForm
from app.models import Post
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@login_required
def index():
form = PostForm()
if form.validate_on_submit():
post = Post(body=form.post.data, author=current_user)
db.session.add(post)
db.session.commit()
flash('Your post is now live!')
return redirect(url_for('index'))
posts = db.session.scalars(current_user.following_posts()).all()
return render_template("index.html", title='Home Page', form=form,
posts=posts)
Post/Redirect/Get Deseni: Form gönderimi sonrası
redirect()kullanılması standart bir pratiktir. Böylece kullanıcı sayfayı yenilediğinde form tekrar gönderilmez.
app/routes.py — Explore View Fonksiyonu Ekle@app.route('/explore')
@login_required
def explore():
query = sa.select(Post).order_by(Post.timestamp.desc())
posts = db.session.scalars(query).all()
return render_template('index.html', title='Explore', posts=posts)
index.html şablonu yeniden kullanılır; form argümanı gönderilmez.