Initial commit: Flask quiz game 'Уроки французского'
This commit is contained in:
73
app.py
Normal file
73
app.py
Normal file
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user