From b14dc2abc25e59e66237fef8d9c2b55ad9592dcf Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 29 Jul 2022 23:01:55 +0530 Subject: Account Page with Fetched Information from the database --- blog/templates/account.html | 77 ++++++++++++++++++++++++++++++++++++++++ blog/urls.py | 1 + blog/views.py | 12 +++++++ users/admin.py | 3 ++ users/migrations/0001_initial.py | 29 +++++++++++++++ users/models.py | 17 ++++++++- 6 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 blog/templates/account.html create mode 100644 users/migrations/0001_initial.py diff --git a/blog/templates/account.html b/blog/templates/account.html new file mode 100644 index 00000000..fb33478b --- /dev/null +++ b/blog/templates/account.html @@ -0,0 +1,77 @@ +{% extends 'partials/base.html' %} {% block content %} +
+

My Account

+

You can change account settings for {{ user.username }} here. If you wish to have additional support, please contact me at support@thatcomputerscientist.com. Please take care of the following points before you submit your support request:

+ +

Your avatar is fetched from gravatar. Update your gravatar email to fetch the avatar. If you don't have an account, you can sign up for one here. If you haven't set up your gravatar email, we would try to fetch your profile picture from your account email, by default. If your account email and gravatar email are the same, you do not need to set a gravatar email.

+ +
+{% endblock %} diff --git a/blog/urls.py b/blog/urls.py index 9ec83613..65508982 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -3,4 +3,5 @@ from . import views urlpatterns = [ path('', views.home, name='home'), + path('account', views.account, name='account'), ] diff --git a/blog/views.py b/blog/views.py index 699940a6..1e01248e 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,6 +1,18 @@ from django.shortcuts import render +from users.models import UserProfile +import hashlib # Create your views here. def home(request): return render(request, 'home.html', {'title': 'Home'}) + +def account(request): + user = request.user + try: + user_profile = UserProfile.objects.get(user=user) + avatar = hashlib.md5(str(user_profile.gravatar_email).lower().encode('utf-8')).hexdigest() if user_profile.gravatar_email else hashlib.md5(str(user.email).lower().encode()).hexdigest() + except UserProfile.DoesNotExist: + user_profile = None + avatar = hashlib.md5(str(user.email).lower().encode()).hexdigest() + return render(request, 'account.html', {'title': 'Account', 'user_profile': user_profile, 'avatar': avatar}) diff --git a/users/admin.py b/users/admin.py index 8c38f3f3..f5116502 100644 --- a/users/admin.py +++ b/users/admin.py @@ -1,3 +1,6 @@ from django.contrib import admin # Register your models here. +from .models import UserProfile + +admin.site.register(UserProfile) diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py new file mode 100644 index 00000000..fd66accf --- /dev/null +++ b/users/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# Generated by Django 4.0.6 on 2022-07-29 15:58 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='UserProfile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('location', models.CharField(blank=True, max_length=50)), + ('bio', models.TextField(blank=True)), + ('gravatar_email', models.EmailField(blank=True, max_length=254)), + ('is_public', models.BooleanField(default=False)), + ('email_public', models.BooleanField(default=False)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/users/models.py b/users/models.py index 71a83623..b67b1274 100644 --- a/users/models.py +++ b/users/models.py @@ -1,3 +1,18 @@ +from django.conf import settings from django.db import models -# Create your models here. +# User Profile Model +class UserProfile(models.Model): + user = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + ) + location = models.CharField(max_length=50, blank=True) + bio = models.TextField(blank=True) + gravatar_email = models.EmailField(blank=True) + is_public = models.BooleanField(default=False) + email_public = models.BooleanField(default=False) + + def __str__(self): + return self.user.username + -- cgit v1.2.3