Помогите написать программу, которая будет проверять правильность введенного ответа на математическое выражение,
Примерно так. Пользователю вы показываете (при получении GET-запроса) два числа. На форме, кроме этого, должны присутствовать два скрытых поля ввода с этими же числами. Защиту от подделки (чтобы пользователь складывал именно те числа, которые ему прислали) можно реализовать при помощи csrf-токена или самостоятельного хэширования двух значений (первый вариант предпочтительнее). При получении POST-запроса, сравниваете сумму чисел (из скрытых полей) с пользовательским вводом и делаете выводы.
UPD:
validate.py:
from flask import Flask, render_template, request
from wtforms import TextField, HiddenField
from flask.ext.wtf import Form
from random import randint
app = Flask(__name__)
app.secret_key = 'perkele 9000'
class TestForm(Form):
answer = TextField("answer")
val1 = HiddenField("val1")
val2 = HiddenField("val2")
@app.route('/', methods=["POST", "GET"])
def test():
if request.method == 'POST':
form = TestForm(request.form)
try:
if int(form.val1.data) + int(form.val2.data) == int(form.answer.data):
return "OK!"
except ValueError:
pass
return "Not OK!"
if request.method == 'GET':
form = TestForm()
form.val1.data = randint(1,99)
form.val2.data = randint(1,99)
return render_template('template.html', form = form)
if __name__ == '__main__':
app.debug = True
app.run()
templates/template.html:
<html>
<head>
<title>Test your arithmetic skills</title>
</head>
<body>
<table>
<tr><td>Calculate <b>{{form.val1.data}} + {{form.val2.data}}</b></td></tr>
<tr>
<td>
<form method=post action="{{ url_for('test') }}">
{% for field in form %}
{{field}}
{% endfor %}
<input type=submit value="OK">
</form>
</td>
</tr>
</table>
</body>
</html>
Здесь показан только набросок, в качестве развития темы можно использовать IntegerField для поля пользовательского ввода, а также реализовать специфичный валидатор формы.