From 190cd464cf99a4c2e8ab8269e5cdf41dad3e1de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana?= Date: Sun, 4 Jun 2023 11:24:53 +0200 Subject: [PATCH] Chapter 11 --- app.db | Bin 36864 -> 36864 bytes app/__init__.py | 2 + app/templates/404.html | 10 +-- app/templates/500.html | 12 ++- app/templates/_post.html | 24 +++-- app/templates/base.html | 83 ++++++++++------- app/templates/edit_profile.html | 30 ++----- app/templates/index.html | 52 +++++------ app/templates/register.html | 46 +++------- app/templates/reset_password.html | 11 +++ app/templates/reset_password_request.html | 11 +++ app/templates/user.html | 97 ++++++++++---------- logs/microblog.log.1 | 104 ++++++++++++++++++++++ 13 files changed, 294 insertions(+), 188 deletions(-) create mode 100644 app/templates/reset_password.html create mode 100644 app/templates/reset_password_request.html create mode 100644 logs/microblog.log.1 diff --git a/app.db b/app.db index c26fc240ac3692a8e59bf1b3fb05ad51d3c8e848..8ba4b97641810242c815701c57eeb83381e208d9 100644 GIT binary patch delta 37 tcmZozz|^pSX@WH4-ib2KjC(gGY_a9Bv@$ZXGBMCIHZZl^tYG&b5CHHa3?Kji delta 37 tcmZozz|^pSX@WH4x`{H*jO#WgY_a7rurf8XGB($File Not Found -

- Back -

+{% block app_content %} +

File Not Found

+

Back

{% endblock %} diff --git a/app/templates/500.html b/app/templates/500.html index 0f1eba7..2e8a06e 100644 --- a/app/templates/500.html +++ b/app/templates/500.html @@ -1,9 +1,7 @@ -{% extends 'base.html' %} +{% extends "base.html" %} -{% block content %} -

An unexpected error has occurred

-

The administrator has been notified. Sorry for the inconvenience!

-

- Back -

+{% block app_content %} +

An unexpected error has occurred

+

The administrator has been notified. Sorry for the inconvenience!

+

Back

{% endblock %} diff --git a/app/templates/_post.html b/app/templates/_post.html index 29bc463..30d18db 100644 --- a/app/templates/_post.html +++ b/app/templates/_post.html @@ -1,11 +1,17 @@ - - - - +
- - - {{ post.author.username }} - says:
{{ post.body }} -
+ + +
+ + + + + + {{ post.author.username }} + + says: +
+ {{ post.body }} +
diff --git a/app/templates/base.html b/app/templates/base.html index e43a9cc..01b8d2a 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,35 +1,50 @@ - - - {% if title %} - {{ title }} - microblog - {% else %} - microblog - {% endif %} - - -
- Microblog: - Home - {% if current_user.is_anonymous %} - Login - {% else %} - Profile - Explore - Logout - {% endif %} -
-
- {% with messages = get_flashed_messages() %} - {% if messages %} - - {% endif %} - {% endwith %} - {% block content %} +{% extends 'bootstrap/base.html' %} - {% endblock %} - - +{% block title %} + {% if title %}{{ title }} - Microblog{% else %}Welcome to Microblog{% endif %} +{% endblock %} + +{% block navbar %} + +{% endblock %} + +{% block content %} +
+ {% with messages = get_flashed_messages() %} + {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} + {% endwith %} + + {# application content needs to be provided in the app_content block #} + {% block app_content %}{% endblock %} +
+{% endblock %} \ No newline at end of file diff --git a/app/templates/edit_profile.html b/app/templates/edit_profile.html index 966ed4c..72cacda 100644 --- a/app/templates/edit_profile.html +++ b/app/templates/edit_profile.html @@ -1,23 +1,11 @@ -{% extends 'base.html' %} +{% extends "base.html" %} +{% import 'bootstrap/wtf.html' as wtf %} -{% block content %} -

Edit Profile

-
- {{ form.hidden_tag() }} -

- {{ form.username.label }}
- {{ form.username(size = 32) }}
- {% for error in form.username.errors %} - [{{ error }}] - {% endfor %} -

-

- {{ form.about_me.label }}
- {{ form.about_me(cols = 50, rows = 4) }}
- {% for error in form.about_me.errors %} - [{{ error }}] - {% endfor %} -

-

{{ form.submit() }}

-
+{% block app_content %} +

Edit Profile

+
+
+ {{ wtf.quick_form(form) }} +
+
{% endblock %} diff --git a/app/templates/index.html b/app/templates/index.html index 6880850..80a05da 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -1,27 +1,27 @@ -{% extends 'base.html' %} +{% extends "base.html" %} +{% import 'bootstrap/wtf.html' as wtf %} -{% block content %} -

Hi, {{ current_user.username }}!

- {% if form %} -
- {{ form.hidden_tag() }} -

- {{ form.post.label }}
- {{ form.post(cols = 32, rows = 4) }}
- {% for error in form.post.errors %} - [{{ error }}] - {% endfor %} -

-

{{ form.submit() }}

-
- {% endif %} - {% for post in posts %} - {% include '_post.html' %} - {% endfor %} - {% if prev_url %} - Newer posts - {% endif %} - {% if next_url %} - Older posts - {% endif %} -{% endblock %}s +{% block app_content %} +

Hi, {{ current_user.username }}!

+ {% if form %} + {{ wtf.quick_form(form) }} +
+ {% endif %} + {% for post in posts %} + {% include '_post.html' %} + {% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/app/templates/register.html b/app/templates/register.html index d931042..b1f2fa4 100644 --- a/app/templates/register.html +++ b/app/templates/register.html @@ -1,37 +1,11 @@ -{% extends 'base.html' %} +{% extends "base.html" %} +{% import 'bootstrap/wtf.html' as wtf %} -{% block content %} -

Register

-
- {{ form.hidden_tag() }} -

- {{ form.username.label }}
- {{ form.username(size = 32) }}
- {% for error in form.username.errors %} - [{{ error }}] - {% endfor %} -

-

- {{ form.email.label }}
- {{ form.email(size = 64) }}
- {% for error in form.email.errors %} - [{{ error }}] - {% endfor %} -

-

- {{ form.password.label }}
- {{ form.password(size = 32) }}
- {% for error in form.password.errors %} - [{{ error }}] - {% endfor %} -

-

- {{ form.password2.label }}
- {{ form.password2(size = 32) }}
- {% for error in form.password2.errors %} - [{{ error }}] - {% endfor %} -

-

{{ form.submit() }}

-
-{% endblock %} +{% block app_content %} +

Register

+
+
+ {{ wtf.quick_form(form) }} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/templates/reset_password.html b/app/templates/reset_password.html new file mode 100644 index 0000000..11bd687 --- /dev/null +++ b/app/templates/reset_password.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% import 'bootstrap/wtf.html' as wtf %} + +{% block app_content %} +

Reset Your Password

+
+
+ {{ wtf.quick_form(form) }} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/templates/reset_password_request.html b/app/templates/reset_password_request.html new file mode 100644 index 0000000..d2f74e4 --- /dev/null +++ b/app/templates/reset_password_request.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% import 'bootstrap/wtf.html' as wtf %} + +{% block app_content %} +

Reset Password

+
+
+ {{ wtf.quick_form(form) }} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/templates/user.html b/app/templates/user.html index 99dda35..0658a3d 100644 --- a/app/templates/user.html +++ b/app/templates/user.html @@ -1,50 +1,49 @@ -{% extends 'base.html' %} +{% extends "base.html" %} -{% block content %} - - - - - -
- - -

User: {{ user.username }}

- {% if user.about_me %} -

{{ user.about_me }}

- {% endif %} - {% if user.last_seen %} -

Last seen on: {{ user.last_seen }}

- {% endif %} -
-

{{ user.followers.count() }} followers, {{ user.followed.count() }} following.

- {% if user == current_user %} -

- Edit your profile -

- {% elif not current_user.is_following(user) %} -

-

- {{ form.hidden_tag() }} - {{ form.submit(value = 'Follow') }} -
-

- {% else %} -

-

- {{ form.hidden_tag() }} - {{ form.submit(value = 'Unfollow') }} -
-

- {% endif %} -
- {% for post in posts %} - {% include '_post.html' %} - {% endfor %} - {% if prev_url %} - Newer posts - {% endif %} - {% if next_url %} - Older posts - {% endif %} -{% endblock %} +{% block app_content %} + + + + + +
+

User: {{ user.username }}

+ {% if user.about_me %}

{{ user.about_me }}

{% endif %} + {% if user.last_seen %}

Last seen on: {{ user.last_seen }}

{% endif %} +

{{ user.followers.count() }} followers, {{ user.followed.count() }} following.

+ {% if user == current_user %} +

Edit your profile

+ {% elif not current_user.is_following(user) %} +

+

+ {{ form.hidden_tag() }} + {{ form.submit(value='Follow', class_='btn btn-default') }} +
+

+ {% else %} +

+

+ {{ form.hidden_tag() }} + {{ form.submit(value='Unfollow', class_='btn btn-default') }} +
+

+ {% endif %} +
+ {% for post in posts %} + {% include '_post.html' %} + {% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/logs/microblog.log.1 b/logs/microblog.log.1 new file mode 100644 index 0000000..785224f --- /dev/null +++ b/logs/microblog.log.1 @@ -0,0 +1,104 @@ +2023-06-03 21:28:36,207 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:28:38,642 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:28:40,330 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:28:41,629 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:29:35,163 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:30:43,525 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:32:38,700 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:33:27,453 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:34:29,733 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:34:49,116 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:35:13,268 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:36:44,548 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:37:05,324 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-03 21:37:15,359 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:01:14,308 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:01:31,728 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:02:26,464 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:02:39,866 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:03:05,683 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:03:35,114 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:15:47,183 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:15:53,685 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 01:19:54,421 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 11:09:37,753 INFO: Microblog startup [in /Users/rmontanana/Code/microblog/app/__init__.py:54] +2023-06-04 11:16:03,037 ERROR: Exception on /explore [GET] [in /Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py:1741] +Traceback (most recent call last): + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 2525, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1822, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1820, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1796, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask_login/utils.py", line 290, in decorated_view + return current_app.ensure_sync(func)(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/Code/microblog/app/routes.py", line 193, in explore + return render_template( + ^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 147, in render_template + return _render(app, template, context) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 130, in _render + rv = template.render(context) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/jinja2/environment.py", line 1301, in render + self.environment.handle_exception() + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/jinja2/environment.py", line 936, in handle_exception + raise rewrite_traceback_stack(source=source) + File "/Users/rmontanana/Code/microblog/app/templates/index.html", line 1, in top-level template code + {% extends 'base.html' %} + File "/Users/rmontanana/Code/microblog/app/templates/base.html", line 1, in top-level template code + {% extends 'bootstrap/base.html' %} + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 62, in get_source + return self._get_source_fast(environment, template) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 98, in _get_source_fast + raise TemplateNotFound(template) +jinja2.exceptions.TemplateNotFound: bootstrap/base.html +2023-06-04 11:22:13,327 ERROR: Exception on /explore [GET] [in /Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py:1741] +Traceback (most recent call last): + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 2525, in wsgi_app + response = self.full_dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1822, in full_dispatch_request + rv = self.handle_user_exception(e) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1820, in full_dispatch_request + rv = self.dispatch_request() + ^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/app.py", line 1796, in dispatch_request + return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask_login/utils.py", line 290, in decorated_view + return current_app.ensure_sync(func)(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/Code/microblog/app/routes.py", line 193, in explore + return render_template( + ^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 147, in render_template + return _render(app, template, context) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 130, in _render + rv = template.render(context) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/jinja2/environment.py", line 1301, in render + self.environment.handle_exception() + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/jinja2/environment.py", line 936, in handle_exception + raise rewrite_traceback_stack(source=source) + File "/Users/rmontanana/Code/microblog/app/templates/index.html", line 2, in top-level template code + {% import 'bootstrap/wtf.html' as wtf %} + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 62, in get_source + return self._get_source_fast(environment, template) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/rmontanana/miniconda3/envs/microblog/lib/python3.11/site-packages/flask/templating.py", line 98, in _get_source_fast + raise TemplateNotFound(template) +jinja2.exceptions.TemplateNotFound: bootstrap/wtf.html