diff options
author | Matt Arnold | 2025-04-09 18:18:37 -0400 |
---|---|---|
committer | Matt Arnold | 2025-04-09 18:18:37 -0400 |
commit | 4ac2861d28676bc886cf80b43a087f1f0044696a (patch) | |
tree | 48dd9e5e62860b137c4363f29d921646ff6f9889 /app.py | |
parent | d1745a9c1e46d43af005ac966cf4170192b76f97 (diff) |
Threaded blogging works
Diffstat (limited to 'app.py')
-rw-r--r-- | app.py | 92 |
1 files changed, 77 insertions, 15 deletions
diff --git a/app.py b/app.py index 219b160..137a6ca 100644 --- a/app.py +++ b/app.py @@ -1,46 +1,108 @@ -from flask import Flask, render_template, request, redirect, url_for +from urllib.parse import urlparse as url_parse + + +from flask import Flask, render_template, request, redirect, url_for, flash from markdown import markdown, Markdown from config import config -from models import Post, db -from forms import PostForm +from models import Post, db, get_replies, Faccet +from models import User as NewUser +from forms import PostForm, LoginForm +from flask_login import ( + login_user, + logout_user, + login_required, + current_user, + LoginManager, +) import os + app = Flask(__name__) -app.config.from_object('config') +app.config.from_object("config") SECRET_KEY = os.urandom(32) -app.config['SECRET_KEY'] = SECRET_KEY +app.config["SECRET_KEY"] = SECRET_KEY app.jinja_options = app.jinja_options.copy() app.jinja_env.add_extension(Markdown) app.jinja_env.filters["markdown"] = markdown +login = LoginManager(app) +login.login_view = "login" + + +@login.user_loader +def load_user(uid): + return NewUser.get(NewUser.id == uid) + + +@app.route("/login", methods=["GET", "POST"]) +def login(): + form = LoginForm() + if form.validate_on_submit(): # noqa + user = NewUser.get(NewUser.username == form.username.data) + if user is None or not user.check_password(form.password.data): + flash("Invalid username or password") + return redirect(url_for("login")) + login_user(user, remember=form.remember_me.data) + next_page = request.args.get("next") + if not next_page or url_parse(next_page).netloc != "": + next_page = url_for("index") + return redirect(next_page) + + return render_template("login.html", form=form) + @app.before_request def before_request(): db.connect() + @app.after_request def after_request(response): db.close() return response -@app.route('/') + +@app.route("/") +@login_required def index(): - posts = Post.select().order_by(Post.created_at.desc()) - return render_template('index.html', posts=posts) + posts = Post.select().where(Post.parent == 0).order_by(Post.created_at.desc()) + return render_template("index.html", posts=posts) + -@app.route('/post/<int:post_id>') +@app.route("/logout") +@login_required +def logout(): + flash("Goodbye!") + logout_user() + return redirect(url_for("login")) + + +@app.route("/post/<int:post_id>") +@login_required def post(post_id): post = Post.get(Post.id == post_id) - return render_template('post.html', post=post) + replies = get_replies(post_id) + return render_template("post.html", post=post, replies=replies) -@app.route('/create', methods=['GET', 'POST']) + +@app.route("/create", methods=["GET", "POST"]) +@login_required def create(): form = PostForm() + replyto = request.args.get("reply", 0) + userctx = NewUser.get(NewUser.username == current_user.username) + asfaccet = Faccet.get(Faccet.name == userctx.default_faccet) if form.validate_on_submit(): - Post.create(title=form.title.data, content=form.content.data) - return redirect(url_for('index')) - return render_template('create.html', form=form) + Post.create( + title=form.title.data, + content=form.content.data, + authour=asfaccet, + parent=replyto, + ) + return redirect(url_for("index")) + return render_template("create.html", form=form) + -if __name__ == '__main__': +if __name__ == "__main__": app.run(debug=True, port=5052) |