Bu bölümde kullanıcı profil sayfaları oluşturulacak, Gravatar servisi ile avatar desteği eklenecek, Jinja alt şablonları kullanılacak ve kullanıcıların profil bilgilerini düzenleyebileceği bir form geliştirilecek.
app/routes.py Dosyasına Profil View Fonksiyonunu Ekle@app.route('/user/<username>')
@login_required
def user(username):
user = db.first_or_404(sa.select(User).where(User.username == username))
posts = [
{'author': user, 'body': 'Test post #1'},
{'author': user, 'body': 'Test post #2'}
]
return render_template('user.html', user=user, posts=posts)
<username> — URL'deki dinamik bileşen; Flask bunu otomatik olarak fonksiyona argüman olarak aktarır.db.first_or_404() — sorgu sonucu bulunursa döndürür, bulunamazsa otomatik 404 hatası fırlatır.app/templates/user.html Dosyasını Oluştur{% extends "base.html" %}
{% block content %}
<h1>User: {{ user.username }}</h1>
<hr>
{% for post in posts %}
<p>
{{ post.author.username }} says: <b>{{ post.body }}</b>
</p>
{% endfor %}
{% endblock %}
app/templates/base.html)<div>
Microblog:
<a href="{{ url_for('index') }}">Home</a>
{% if current_user.is_anonymous %}
<a href="{{ url_for('login') }}">Login</a>
{% else %}
<a href="{{ url_for('user', username=current_user.username) }}">Profile</a>
<a href="{{ url_for('logout') }}">Logout</a>
{% endif %}
</div>
url_for('user', username=current_user.username) — dinamik argümanlı URL üretimi.Sunucuda görsel saklamak yerine Gravatar servisi kullanılır. Gravatar, e-posta adresinin MD5 hash'i ile URL oluşturur.
>>> from hashlib import md5
>>> '<https://www.gravatar.com/avatar/>' + md5(b'john@example.com').hexdigest()
'<https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6>'
app/models.py Dosyasına avatar() Metodunu Eklefrom hashlib import md5
class User(UserMixin, db.Model):
# ...
def avatar(self, size):
digest = md5(self.email.lower().encode('utf-8')).hexdigest()
return f'<https://www.gravatar.com/avatar/{digest}?d=identicon&s={size}>'
d=identicon — Gravatar hesabı olmayan kullanıcılar için geometrik desen üretir.