diff --git a/portfolio/__init__.py b/portfolio/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a4d140acca976590377e158921d72bd869dc84a0 --- /dev/null +++ b/portfolio/__init__.py @@ -0,0 +1,128 @@ +from flask import Flask, render_template, request, redirect, flash, url_for +from flask_sqlalchemy import SQLAlchemy +from flask_wtf import FlaskForm +from wtforms import StringField, SubmitField, RadioField +from wtforms.validators import DataRequired +from datetime import datetime +import os + +app = Flask(__name__) + +basedir = os.path.abspath(os.path.dirname(__file__)) +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'cw2.db') +app.config['SECRET_KEY'] = '(34879*&378^83hehj3349837rjkhekjfn)' +app.config['SRF_ENABLED'] = True +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True + +db = SQLAlchemy(app) + +class CommentForm(FlaskForm): + name = StringField('Name',validators=[DataRequired()]) + comment = StringField('Comment',validators=[DataRequired()]) + submit = SubmitField('Post Comment') + +class PasswordForm(FlaskForm): + password = StringField('Name',validators=[DataRequired()]) + submit = SubmitField('Submit Password') + +class FilterForm(FlaskForm): + option = RadioField("Label",choices=[('asc','Ascending'),('desc','Descending')]) + submit = SubmitField("Filter") + +class Comment(db.Model): + id = db.Column(db.Integer, primary_key=True) + date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + name = db.Column(db.String, nullable=False) + comment = db.Column(db.Text, nullable=False) + +class Password(db.Model): + id = db.Column(db.Integer, primary_key=True) + date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + password = db.Column(db.String, nullable=False) + +class Project(db.Model): + id = db.Column(db.Integer, primary_key=True) + year = db.Column(db.String, nullable=False) + project_category = db.Column(db.String, nullable=False) + project_name = db.Column(db.String, nullable=False) + project_description = db.Column(db.String, nullable=False) + +def __repr__(self): + return f"Comment('{self.name}', '{self.comment}')" + +@app.route("/") + +@app.route("/index") +def index(): + password = PasswordForm() + return render_template('index.html', title='Index',form=password) + +@app.route("/", methods=['GET', 'POST']) +@app.route("/index", methods=['GET', 'POST']) +def passwordSubmit(): + password = PasswordForm() + inputPassword = password.password.data + if(inputPassword == "admin"): + flash('Welcome!') + return redirect(url_for("home")) + else: + flash('Wrong password') + return redirect(url_for("index")) + +@app.route("/home") +def home(): + return render_template('home.html', title='Home') + +@app.route("/about") +def about(): + projects = Project.query.all() + return render_template('about.html', title='About',projects=projects) + +@app.route("/about", methods=['GET', 'POST']) +def about_project(): + year = request.form.get('year') + category = request.form.get('category') + projects = Project.query + if year: + projects = projects.filter(Project.year == year) + if category: + projects = projects.filter(Project.project_category == category) + return render_template('about.html', projects=projects) + +@app.route("/comment") +def comment(): + comment = CommentForm() + filter = FilterForm() + recentcomments = Comment.query.order_by(Comment.date.desc()).all() + return render_template('comment.html', title='Comment',comment=comment,recentcomments=recentcomments,filter=filter) + +@app.route("/comment", methods=['GET', 'POST']) +def commentposted(): + print('test') + comment = CommentForm() + name = comment.name.data + iscomment = comment.comment.data + new_comment = Comment() + new_comment.name = name + new_comment.comment = iscomment + db.session.add(new_comment) + db.session.commit() + flash('Comment posted!') + return redirect(url_for('comment')) + +@app.route("/comment_filter", methods=['GET', 'POST']) +def comment_order(): + comment = CommentForm() + filter = FilterForm() + order = filter.option.data + if order == "asc": + recentcomments = Comment.query.order_by(Comment.date).all() + elif order == "desc": + recentcomments = Comment.query.order_by(Comment.date.desc()).all() + else: + recentcomments = Comment.query.order_by(Comment.date.desc()).all() + return render_template('comment.html', title='Comment', filter=filter, comment=comment, recentcomments=recentcomments) + + +with app.app_context(): + db.create_all() \ No newline at end of file