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 @@
- +