74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
import json
|
|
from flask import Flask, render_template, request, redirect, url_for, make_response
|
|
|
|
app = Flask(__name__)
|
|
app.secret_key = 'your_secret_key_here'
|
|
|
|
ADMIN_PASSWORD = 'RaMaZaNoV2013'
|
|
|
|
def load_questions():
|
|
with open('data/questions.json', 'r', encoding='utf-8') as f:
|
|
return json.load(f)
|
|
|
|
def save_questions(data):
|
|
with open('data/questions.json', 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
|
|
@app.context_processor
|
|
def inject_enumerate():
|
|
return dict(enumerate=enumerate)
|
|
|
|
@app.route('/')
|
|
def index():
|
|
questions = load_questions()
|
|
return render_template('index.html', questions=questions)
|
|
|
|
def check_auth():
|
|
password = request.cookies.get('admin_password')
|
|
return password == ADMIN_PASSWORD
|
|
|
|
@app.route('/admin')
|
|
def admin():
|
|
if not check_auth():
|
|
return render_template('login.html')
|
|
questions = load_questions()
|
|
return render_template('admin.html', questions=questions)
|
|
|
|
@app.route('/admin/login', methods=['POST'])
|
|
def login():
|
|
password = request.form.get('password')
|
|
if password == ADMIN_PASSWORD:
|
|
resp = make_response(redirect(url_for('admin')))
|
|
resp.set_cookie('admin_password', password)
|
|
return resp
|
|
return render_template('login.html', error='Неверный пароль')
|
|
|
|
@app.route('/admin/logout')
|
|
def logout():
|
|
resp = make_response(redirect(url_for('admin')))
|
|
resp.set_cookie('admin_password', '', expires=0)
|
|
return resp
|
|
|
|
@app.route('/admin/edit/<int:cat>/<int:q>', methods=['GET', 'POST'])
|
|
def edit_question(cat, q):
|
|
if not check_auth():
|
|
return redirect(url_for('admin'))
|
|
questions = load_questions()
|
|
if request.method == 'POST':
|
|
questions['categories'][cat]['questions'][q]['question'] = request.form['question']
|
|
questions['categories'][cat]['questions'][q]['options'] = [
|
|
request.form['option1'],
|
|
request.form['option2'],
|
|
request.form['option3'],
|
|
request.form['option4']
|
|
]
|
|
questions['categories'][cat]['questions'][q]['answer'] = int(request.form['answer'])
|
|
questions['categories'][cat]['questions'][q]['cost'] = int(request.form['cost'])
|
|
save_questions(questions)
|
|
return redirect(url_for('admin'))
|
|
question = questions['categories'][cat]['questions'][q]
|
|
return render_template('edit.html', question=question, cat=cat, q=q)
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True, port=5002)
|