From b94876f39d9b8d6a2d22ead823dab740d75c9823 Mon Sep 17 00:00:00 2001 From: Nyemba Ambela Jean Nicolas Date: Wed, 28 May 2025 22:53:38 +0100 Subject: [PATCH] page blog --- .gitignore | 2 + Rapport.docx | Bin 0 -> 23567 bytes blog-app/blogapp.py | 63 ++++++++++++++++++++++++ blog-app/forms.py | 24 +++++++++ blog-app/requirements.txt | Bin 0 -> 596 bytes blog-app/static/main.css | 0 blog-app/templates/about.html | 10 ++++ blog-app/templates/home.html | 8 +++ blog-app/templates/layout.html | 40 +++++++++++++++ blog-app/templates/login.html | 61 +++++++++++++++++++++++ blog-app/templates/register.html | 82 +++++++++++++++++++++++++++++++ ~$apport.docx | Bin 0 -> 162 bytes ~WRL3117.tmp | Bin 0 -> 19487 bytes 13 files changed, 290 insertions(+) create mode 100644 .gitignore create mode 100644 Rapport.docx create mode 100644 blog-app/blogapp.py create mode 100644 blog-app/forms.py create mode 100644 blog-app/requirements.txt create mode 100644 blog-app/static/main.css create mode 100644 blog-app/templates/about.html create mode 100644 blog-app/templates/home.html create mode 100644 blog-app/templates/layout.html create mode 100644 blog-app/templates/login.html create mode 100644 blog-app/templates/register.html create mode 100644 ~$apport.docx create mode 100644 ~WRL3117.tmp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4ea05a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv/ +__pycache__/ \ No newline at end of file diff --git a/Rapport.docx b/Rapport.docx new file mode 100644 index 0000000000000000000000000000000000000000..8d7fb33b4dc641995c082e8658275b4aade1a8a7 GIT binary patch literal 23567 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 GarIw~vJ21v literal 0 HcmV?d00001 diff --git a/blog-app/blogapp.py b/blog-app/blogapp.py new file mode 100644 index 0000000..f05de36 --- /dev/null +++ b/blog-app/blogapp.py @@ -0,0 +1,63 @@ +from flask import Flask, render_template, url_for, flash, redirect +from forms import RegistrationForm, LoginForm + +app = Flask(__name__) + +app.config['SECRET_KEY'] = 'db3746b2ffa650b3804e4316d227f853' + +posts = [ + { + 'pagetitle': 'home page' + } +] + +navbaritems = [ + + { + 'name': 'home', + 'url': 'home' + }, + { + 'name': 'login', + 'url': 'login' + }, + { + 'name': 'register', + 'url': 'register' + } +] + + +@app.route("/") +@app.route("/home") +def home(): + return render_template('home.html', posts=posts, navbaritems=navbaritems) + + +@app.route("/about") +def about(): + return render_template('about.html', title='About', posts=posts, navbaritems=navbaritems) + +@app.route("/register", methods=['GET', 'POST']) +def register(): + form = RegistrationForm() + if form.validate_on_submit(): + flash(f'Account created for {form.username.data}!') + return redirect(url_for('home')) + return render_template('register.html', title='Register', form=form) + + +@app.route("/login", methods=['GET', 'POST']) +def login(): + form = LoginForm() + if form.validate_on_submit(): + if form.email.data == 'admin' and form.password.data == 'admin': + flash('You have been log in !') + return redirect(url_for('home')) + else: + flash('Login Unsuccessful') + return render_template('login.html', title='Login', form=form) + + +if __name__ == '__main__': + app.run(debug=True, port=8700) diff --git a/blog-app/forms.py b/blog-app/forms.py new file mode 100644 index 0000000..47ac3ff --- /dev/null +++ b/blog-app/forms.py @@ -0,0 +1,24 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, PasswordField, SubmitField, BooleanField +from wtforms.validators import DataRequired, Length, Email, EqualTo + + +class RegistrationForm(FlaskForm): + username = StringField('Username', + validators=[DataRequired(), Length(min=2, max=20)]) + email = StringField('Email', + validators=[DataRequired(), Email()]) + + password = PasswordField('Password' , validators=[DataRequired()]) + confirm_password = PasswordField('Confirm Password' , + validators=[DataRequired(), EqualTo('password')]) + submit =SubmitField('Sign Up') + + +class LoginForm(FlaskForm): + email = StringField('Email', + validators=[DataRequired(), Email()]) + + password = PasswordField('Password' , validators=[DataRequired()]) + remember = BooleanField('Remember Me') + submit =SubmitField('Login') \ No newline at end of file diff --git a/blog-app/requirements.txt b/blog-app/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..f9242918f8dbb6da5f84ab2abae899bd1c30f362 GIT binary patch literal 596 zcmZWnOHaZ;7@V_-KScvAQ8;+zK;lUgj)q6k^4Jn+o8XUEXXb0g#E{Lx&g{&5vwVLo zu}6u79SWTA#Lp1-m~ahniyN$ruZRm9^E~^5RYWV^Tj0PY#(?OE>%q6z)IOuO#_|`> ziBCE_5kKNW&Igr}IdXX9iUftVOKQBKrHk^exz~1-Hldgc=A8xj2a1BYGg+H4AI*& z&reL(u$vct-%v{$VyWTGNspeQCaO0$(6{6sZh8Z;$7Z%hYU-)Kg3fK1Nou*@JT&J{ ay~8K>hBNf8`d8%EicZ2YyyT;9qQ4(r%~j?A literal 0 HcmV?d00001 diff --git a/blog-app/static/main.css b/blog-app/static/main.css new file mode 100644 index 0000000..e69de29 diff --git a/blog-app/templates/about.html b/blog-app/templates/about.html new file mode 100644 index 0000000..0d7d2b3 --- /dev/null +++ b/blog-app/templates/about.html @@ -0,0 +1,10 @@ +{% extends "layout.html" %} + +{% block content %} +{% for post in posts %} +

{{ post.universe }}

+

{{ post.powerlevel }}

+ {{ post.date_posted }} +{% endfor %} + +{% endblock content %} \ No newline at end of file diff --git a/blog-app/templates/home.html b/blog-app/templates/home.html new file mode 100644 index 0000000..cc319a3 --- /dev/null +++ b/blog-app/templates/home.html @@ -0,0 +1,8 @@ +{% extends "layout.html" %} + +{% block content %} +{% for post in posts %} +

{{ post.pagetitle }}

+{% endfor %} + +{% endblock content %} \ No newline at end of file diff --git a/blog-app/templates/layout.html b/blog-app/templates/layout.html new file mode 100644 index 0000000..3a5ebf2 --- /dev/null +++ b/blog-app/templates/layout.html @@ -0,0 +1,40 @@ + + + + + + + {% if title %} + Blog post - {{ title }} + {% else %} + Blog posts + {% endif %} + + + + + + {% block navbar %} + {% for post in navbaritems %} +
  • {{ post.name }}
  • + {% endfor %} + {% endblock %} + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for caterogy, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    + + {% block content %} + {% endblock %} +
    + + + \ No newline at end of file diff --git a/blog-app/templates/login.html b/blog-app/templates/login.html new file mode 100644 index 0000000..1ae6c4f --- /dev/null +++ b/blog-app/templates/login.html @@ -0,0 +1,61 @@ +{% extends "layout.html" %} + +{% block content %} + +
    +
    + {{ form.hidden_tag() }} +
    + Login +
    + {{ form.email.label() }} + {% if form.email.errors %} + {{ form.email() }} +
    + {% for errors in form.email.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.email() }} + {% endif %} +
    + +
    + +
    + {{ form.password.label() }} + {% if form.password.errors %} + {{ form.password()}} +
    + {% for errors in form.password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.password() }} + {% endif %} +
    + +
    + +
    + {{ form.remember() }} + {{ form.remember.label() }} +
    + +
    +
    + {{ form.submit() }} +
    + + Forgot Password + +
    +
    + +
    + Need an Account ? Sign Up Now +
    + +{% endblock content %} \ No newline at end of file diff --git a/blog-app/templates/register.html b/blog-app/templates/register.html new file mode 100644 index 0000000..6778f1b --- /dev/null +++ b/blog-app/templates/register.html @@ -0,0 +1,82 @@ +{% extends "layout.html" %} + + + +{% block content %} + +
    +
    + {{ form.hidden_tag() }} +
    + Join Today +
    + {{ form.username.label() }} + {% if form.username.errors %} + {{ form.username()}} +
    + {% for errors in form.username.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.username() }} + {% endif %} +
    +
    +
    + {{ form.email.label() }} + {% if form.email.errors %} + {{ form.email() }} +
    + {% for errors in form.email.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.email() }} + {% endif %} +
    + +
    + +
    + {{ form.password.label() }} + {% if form.password.errors %} + {{ form.password()}} +
    + {% for errors in form.password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.password() }} + {% endif %} +
    + +
    + +
    + {{ form.confirm_password.label() }} + {% if form.confirm_password.errors %} + {{ form.confirm_password()}} +
    + {% for errors in form.confirm_password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.confirm_password() }} + {% endif %} +
    +
    +
    + {{ form.submit() }} +
    +
    +
    + +
    + Already Have an Account ? Sign In +
    + +{% endblock content %} \ No newline at end of file diff --git a/~$apport.docx b/~$apport.docx new file mode 100644 index 0000000000000000000000000000000000000000..4ced5e3615e6c9f89696082acd6abc3438082d7b GIT binary patch literal 162 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 C4Z(5% literal 0 HcmV?d00001