You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
beaker-blog/src/app.py

142 lines
3.8 KiB

from flask import (Flask, abort, make_response, redirect, render_template, request, url_for)
from flask_font_awesome import FontAwesome
import config
import content as con_gen
from forms import SearchForm, register_csrf
TITLE = config.TITLE
STITLE = config.STITLE
STYLE = config.STYLE
LANGUAGE = config.LANGUAGE
DESCRIPTION = config.DESCRIPTION
WEBSITE = config.WEBSITE
MAIL = config.MAIL
app = Flask(__name__)
register_csrf(app)
font_awesome = FontAwesome(app)
@app.errorhandler(404)
def page_not_found(e):
return render_template("error.html",
title=TITLE,
stitle=STITLE,
errorcode="404",
style=STYLE,
language=LANGUAGE), 404
@app.route("/index.html")
def index_re():
return redirect(url_for("index"))
@app.route("/")
def index():
content = con_gen.gen_index_string()
return render_template("index.html",
title=TITLE,
stitle=STITLE,
content_string=content,
style=STYLE,
language=LANGUAGE)
@app.route("/search.html", methods=["GET", "POST"])
def search_re():
return redirect(url_for("search"))
@app.route("/search", methods=["GET", "POST"])
def search():
form = SearchForm()
if request.method == "POST":
query_str = request.form["query_str"]
content = con_gen.gen_query_res_string(query_str)
return render_template("search.html",
title=TITLE,
stitle=STITLE,
style=STYLE,
form=form,
content=content,
language=LANGUAGE), 200
return render_template("search.html",
title=TITLE,
stitle=STITLE,
style=STYLE,
form=form,
content="",
language=LANGUAGE), 200
@app.route("/imprint.html")
def imprint_re():
return redirect(url_for("imprint"))
@app.route("/imprint")
def imprint():
return render_template("imprint.html",
title=TITLE,
stitle=STITLE,
mail=MAIL,
style=STYLE,
language=LANGUAGE)
@app.route("/archive.html")
def archive_re():
return redirect(url_for("archive"))
@app.route("/archive")
def archive():
content = con_gen.gen_arch_string()
return render_template("archive.html",
title=TITLE,
stitle=STITLE,
content_string=content,
style=STYLE,
language=LANGUAGE)
@app.route("/entry/<path>")
def entry(path):
content = con_gen.gen_stand_string(path)
if content != "":
return render_template("standalone.html",
title=TITLE,
stitle=STITLE,
content_string=content,
style=STYLE,
language=LANGUAGE)
abort(404)
@app.route("/feed.xml")
@app.route("/rss.xml")
@app.route("/rss")
def feed_re():
return redirect(url_for("feed"))
@app.route("/feed")
def feed():
content = con_gen.get_rss_string()
feed_xml = render_template("feed.xml",
content_string=content,
title=TITLE,
description=DESCRIPTION,
website=WEBSITE,
language=LANGUAGE)
response = make_response(feed_xml)
response.headers["Content-Type"] = "application/rss+xml"
return response
if __name__ == "__main__":
con_gen.prepare_tts()
app.run(host="0.0.0.0")