forked from wuvt/wuvt-site
-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.py
105 lines (73 loc) · 2.64 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from flask import abort, flash, jsonify, make_response, render_template, \
redirect, request, url_for, Response, send_from_directory
from sqlalchemy import desc
from wuvt import app
from wuvt import db
from wuvt import sse
from wuvt.models import User, Page
from wuvt.blog.models import Article, Category
from wuvt.blog.views import *
from wuvt.trackman.views import *
@app.context_processor
def inject_menus():
menus = {}
pages = db.session.query(Page.name, Page.slug, Page.menu, Page.published).\
filter(Page.menu is not None).order_by(Page.name).all()
for page in pages:
menu = str(page.menu)
if menu not in menus:
menus[menu] = []
menus[menu].append(page)
return {'menus': menus}
@app.route('/index.php')
def redir_index():
return redirect(url_for('index'))
@app.route('/robots.txt')
def static_from_root():
return send_from_directory(app.static_folder, request.path[1:])
@app.route('/')
@app.route('/index/<int:page>')
def index(page=1):
articles = Article.query.filter_by(published=True, front_page=True).\
order_by(desc(Article.datetime)).paginate(page,
app.config['POSTS_PER_PAGE'])
return render_template('index.html', articles=articles)
@app.route('/<string:slug>')
def page(slug):
page = Page.query.filter(Page.slug == slug).first()
if not page:
abort(404)
return render_template('page.html', page=page)
@app.route('/js/init.js')
def init_js():
resp = make_response(render_template('init.js'))
resp.headers['Content-Type'] = "application/javascript; charset=utf-8"
return resp
@app.route('/live')
def livestream():
if request.headers.get('accept') == 'text/event-stream':
response = Response(sse.event_stream(), mimetype="text/event-stream",
headers={'X-Accel-Buffering': "no"})
return response
else:
abort(400)
@app.errorhandler(400)
def error400(error):
if request.wants_json():
return jsonify({'errors': "400 Bad Request"}), 400
return render_template('error400.html'), 400
@app.errorhandler(403)
def error403(error):
if request.wants_json():
return jsonify({'errors': "403 Forbidden"}), 403
return render_template('error403.html'), 403
@app.errorhandler(404)
def error404(error):
if request.wants_json():
return jsonify({'errors': "404 Not Found"}), 404
return render_template('error404.html'), 404
@app.errorhandler(405)
def error405(error):
if request.wants_json():
return jsonify({'errors': "405 Method Not Allowed"}), 405
return render_template('error405.html'), 405