diff --git a/Notes.docx b/Notes.docx index 3995121..8d0c737 100644 Binary files a/Notes.docx and b/Notes.docx differ diff --git a/blog-app/blogapp/__init__.py b/blog-app/blogapp/__init__.py index f44d1bd..c774037 100644 --- a/blog-app/blogapp/__init__.py +++ b/blog-app/blogapp/__init__.py @@ -1,10 +1,15 @@ + from flask import Flask from flask_sqlalchemy import SQLAlchemy # type: ignore +from flask_bcrypt import Bcrypt # type: ignore + + app = Flask(__name__) app.config['SECRET_KEY'] = 'db3746b2ffa650b3804e4316d227f853' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blogsite.db' db = SQLAlchemy(app) +bcrypt = Bcrypt(app) -from blogapp import routes \ No newline at end of file +from blogapp import routes diff --git a/blog-app/blogapp/forms.py b/blog-app/blogapp/forms.py index 47ac3ff..16d0797 100644 --- a/blog-app/blogapp/forms.py +++ b/blog-app/blogapp/forms.py @@ -1,6 +1,7 @@ from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField, BooleanField -from wtforms.validators import DataRequired, Length, Email, EqualTo +from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError +from blogapp.models import User class RegistrationForm(FlaskForm): @@ -14,6 +15,15 @@ class RegistrationForm(FlaskForm): validators=[DataRequired(), EqualTo('password')]) submit =SubmitField('Sign Up') + def validate_username(self, username): + user = User.query.filter_by(username=username.data).first() + if user: + raise ValidationError('That username is taken. Please choose a different one') + + def validate_email(self, email): + user = User.query.filter_by(email=email.data).first() + if user: + raise ValidationError('That email is taken. Please choose a different one') class LoginForm(FlaskForm): email = StringField('Email', diff --git a/blog-app/blogapp/routes.py b/blog-app/blogapp/routes.py index 93eae17..5e2585e 100644 --- a/blog-app/blogapp/routes.py +++ b/blog-app/blogapp/routes.py @@ -1,5 +1,5 @@ from flask import render_template, url_for, flash, redirect -from blogapp import app +from blogapp import app, db, bcrypt from blogapp.forms import RegistrationForm, LoginForm from blogapp.models import User, Post @@ -28,8 +28,15 @@ def home(): def register(): form = RegistrationForm() if form.validate_on_submit(): - flash(f'Account created for {form.username.data}!') - return redirect(url_for('home')) + hashed_password = bcrypt.generate_password_hash( + form.password.data).decode('utf-8') + user = User(username=form.username.data, + email=form.email.data, password=hashed_password) + db.session.add(user) + db.session.commit() + + flash(f'Your account has been created !!') + return redirect(url_for('login')) return render_template('register.html', title='register', form=form, pagetitle=pagetitle) @@ -38,8 +45,8 @@ 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 !') + flash(f'You have been log in !') return redirect(url_for('home')) else: - flash('Login Unsuccessful') + flash(f'Login Unsuccessful') return render_template('login.html', title='login', form=form, pagetitle=pagetitle) diff --git a/blog-app/blogapp/static/main.css b/blog-app/blogapp/static/main.css index e69de29..eb75506 100644 --- a/blog-app/blogapp/static/main.css +++ b/blog-app/blogapp/static/main.css @@ -0,0 +1,3 @@ +.invalid { + color:red; +} \ No newline at end of file diff --git a/blog-app/blogapp/templates/layout.html b/blog-app/blogapp/templates/layout.html index 61a302b..63ea8ac 100644 --- a/blog-app/blogapp/templates/layout.html +++ b/blog-app/blogapp/templates/layout.html @@ -13,7 +13,7 @@ - +
{% block navbar %} {% endblock %} +
- {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for caterogy, message in messages %} -
- {{ message }} -
- {% endfor %} - {% endif %} - {% endwith %} +
{% for head in pagetitle %} {% if title == head.title %} @@ -38,10 +31,21 @@ {% endif %} {% endfor %}
+ {% 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/blogapp/templates/login.html b/blog-app/blogapp/templates/login.html index 1ae6c4f..d9d19c1 100644 --- a/blog-app/blogapp/templates/login.html +++ b/blog-app/blogapp/templates/login.html @@ -11,8 +11,8 @@ {{ form.email.label() }} {% if form.email.errors %} {{ form.email() }} -
- {% for errors in form.email.errors %} +
+ {% for error in form.email.errors %} {{ error }} {% endfor %}
@@ -27,8 +27,8 @@ {{ form.password.label() }} {% if form.password.errors %} {{ form.password()}} -
- {% for errors in form.password.errors %} +
+ {% for error in form.password.errors %} {{ error }} {% endfor %}
diff --git a/blog-app/blogapp/templates/register.html b/blog-app/blogapp/templates/register.html index 6778f1b..4e4017f 100644 --- a/blog-app/blogapp/templates/register.html +++ b/blog-app/blogapp/templates/register.html @@ -1,7 +1,5 @@ {% extends "layout.html" %} - - {% block content %}
@@ -11,62 +9,62 @@ Join Today
{{ form.username.label() }} - {% if form.username.errors %} - {{ form.username()}} -
- {% for errors in form.username.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.username() }} - {% endif %} + {% if form.username.errors %} + {{ form.username()}} +
+ {% for error 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 %} + {% if form.email.errors %} + {{ form.email() }} +
+ {% for error 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 %} + {% if form.password.errors %} + {{ form.password() }} +
+ {% for error in form.password.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.password(class="form-control") }} + {% 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 %} + {% if form.confirm_password.errors %} + {{ form.confirm_password()}} +
+ {% for error in form.confirm_password.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.confirm_password() }} + {% endif %}
diff --git a/blog-app/instance/blogsite.db b/blog-app/instance/blogsite.db index dadbd8e..4c0108d 100644 Binary files a/blog-app/instance/blogsite.db and b/blog-app/instance/blogsite.db differ