commit b94876f39d9b8d6a2d22ead823dab740d75c9823 Author: Nyemba Ambela Jean Nicolas Date: Wed May 28 22:53:38 2025 +0100 page blog 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 0000000..8d7fb33 Binary files /dev/null and b/Rapport.docx differ 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 0000000..f924291 Binary files /dev/null and b/blog-app/requirements.txt differ 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 0000000..4ced5e3 Binary files /dev/null and b/~$apport.docx differ diff --git a/~WRL3117.tmp b/~WRL3117.tmp new file mode 100644 index 0000000..0696486 Binary files /dev/null and b/~WRL3117.tmp differ