From e37051f9a645507b0187efa6d29203a38c1ed6b5 Mon Sep 17 00:00:00 2001 From: Harry Hughes <hugheshi@cardiff.ac.uk> Date: Sun, 29 Jan 2023 14:51:51 +0000 Subject: [PATCH] second commit --- blog/forms.py | 6 +++--- blog/models.py | 24 +++++++++++++----------- blog/routes.py | 4 ++-- blog/templates/login.html | 2 +- blog/templates/register.html | 2 +- requirements.txt | 26 +++++++++++++------------- wsgi.py | 2 +- 7 files changed, 34 insertions(+), 32 deletions(-) diff --git a/blog/forms.py b/blog/forms.py index a9b8b81..b5b8a39 100644 --- a/blog/forms.py +++ b/blog/forms.py @@ -7,7 +7,7 @@ from blog.models import User class RegistrationForm(FlaskForm): email = StringField('Email',validators=[DataRequired(), Email()]) username = StringField('Username',validators=[DataRequired(), Length(min=2, max=11),Regexp('^[a-z]{4,11}$')]) - password = PasswordField('Password',validators=[DataRequired()]) + password_hash = PasswordField('Password',validators=[DataRequired()]) submit = SubmitField('Register') def validate_username(self, username): user = User.query.filter_by(username=username.data).first() @@ -23,13 +23,13 @@ class RegistrationForm(FlaskForm): class LoginForm(FlaskForm): email = StringField('Email',validators=[DataRequired()]) username = StringField('Username',validators=[DataRequired()]) - password = PasswordField('Password',validators=[DataRequired()]) + password_hash = PasswordField('Password',validators=[DataRequired()]) submit = SubmitField('Login') class UpdateAccountForm(FlaskForm): email = StringField('Email',validators=[DataRequired(), Email()]) username = StringField('Username',validators=[DataRequired(), Length(min=2, max=11)]) - password = PasswordField('Password',validators=[DataRequired()]) + password_hash = PasswordField('Password',validators=[DataRequired()]) submit = SubmitField('Update') def validate_username(self, username): if username.data != current_user.username: diff --git a/blog/models.py b/blog/models.py index 9c1fc7a..9ad119f 100644 --- a/blog/models.py +++ b/blog/models.py @@ -16,13 +16,25 @@ class Post(db.Model): class User(UserMixin,db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(15), unique=True, nullable=False) - password=db.Column(db.String(128)) + password_hash=db.Column(db.String(128)) post = db.relationship('Post', backref='user', lazy=True) is_admin=db.Column(db.Boolean,nullable=False,default=False) email=db.Column(db.String(256), unique=True) def __repr__(self): return f"User('{self.username}')" + + #adapted from Grinberg(2014, 2018) + @property + def password(self): + raise AttributeError('Password is not readable.') + + @password.setter + def password(self,password): + self.password_hash=generate_password_hash(password) + + def verify_password(self,password): + return check_password_hash(self.password_hash,password) class Portfolio(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -33,17 +45,7 @@ class Portfolio(db.Model): technologies = db.Column(db.String(255)) link = db.Column(db.String(255)) -#adapted from Grinberg(2014, 2018) - @property - def password(self): - raise AttributeError('Password is not readable.') - @password.setter - def password(self,password): - self.password=generate_password_hash(password) - - def verify_password(self,password): - return check_password_hash(self.password,password) @login_manager.user_loader def load_user(user_id): diff --git a/blog/routes.py b/blog/routes.py index 29ad5ae..a05235e 100644 --- a/blog/routes.py +++ b/blog/routes.py @@ -87,7 +87,7 @@ def account(): def register(): form = RegistrationForm() if form.validate_on_submit(): - user = User(username=form.username.data, email=form.email.data, password=form.password.data) + user = User(username=form.username.data, email=form.email.data, password=form.password_hash.data) db.session.add(user) db.session.commit() flash('Registration successful!') @@ -103,7 +103,7 @@ def login(): form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() - if user and (user.password, form.password.data): + if user and (user.password_hash, form.password_hash.data): login_user(user) flash('You\'ve successfully logged in,'+' '+ current_user.username +'!') return redirect(url_for('home')) diff --git a/blog/templates/login.html b/blog/templates/login.html index 26ad504..d6343d4 100644 --- a/blog/templates/login.html +++ b/blog/templates/login.html @@ -4,7 +4,7 @@ {{ form.csrf_token }} <p>{{ form.email.label }} {{form.email}}</p> <p>{{ form.username.label }} {{ form.username }}</p> - <p>{{ form.password.label }} {{ form.password }}</p> + <p>{{ form.password_hash.label }} {{ form.password_hash }}</p> <p><input type="submit" value="Login"></p> </form> {% endblock content %} diff --git a/blog/templates/register.html b/blog/templates/register.html index 2cb3c41..160d358 100644 --- a/blog/templates/register.html +++ b/blog/templates/register.html @@ -4,7 +4,7 @@ {{ form.csrf_token }} <p>{{ form.email.label }} {{ form.email }}</p> <p>{{ form.username.label }} {{ form.username }}</p> - <p>{{ form.password.label }} {{ form.password }}</p> + <p>{{ form.password_hash.label }} {{ form.password_hash }}</p> <input type="submit" value="Register"> {% for error in form.username.errors %} diff --git a/requirements.txt b/requirements.txt index 3e393c4..2cee57e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,16 +1,16 @@ -click -email-validator -Flask +click==8.1.3 +email-validator==1.3.0 +Flask==2.2.2 Flask-Admin -Flask-Login -Flask-SQLAlchemy -Flask-WTF -greenlet -gunicorn +Flask-Login==0.6.2 +Flask-SQLAlchemy==2.5.1 +Flask-WTF==1.0.1 +greenlet==2.0.1 +gunicorn==20.1.0 itsdangerous -Jinja2 -MarkupSafe -PyMySQL +Jinja2==3.1.2 +MarkupSafe==2.1.1 +PyMySQL==1.0.2 SQLAlchemy==1.4.46 -Werkzeug -WTForms +Werkzeug==2.2.2 +WTForms==3.0.1 diff --git a/wsgi.py b/wsgi.py index 70ba284..0a54e8d 100644 --- a/wsgi.py +++ b/wsgi.py @@ -1,4 +1,4 @@ from blog import app as application if __name__ == '__main__': - app.run(debug=True) + application.run(debug=True) -- GitLab