Найти - Пользователи
Полная версия: Flask и html форма
Начало » Web » Flask и html форма
1
BG
Доброго времени суток!

Подскажите как реализовать данную задачу:

Есть форма:
Имя и Любимый цвет

<html>
<head>
<title>Любимый цвет</title>
</head>
<body>
<form>
Имя: <input type="text" name="name"><br>
Любимый цвет: <input type="text" name="color"><br>
<input type="submit" value="Отправить">
</form>
<a href="/table">Внести данные в CSV таблицу</a>
<p>
<a href="/stats">Глянуть статистику</a>
</p>
</body></html>

Программа должна создавать csv файл при каждом нажатии кнопки Отправить. + Желательно на отдельной страничке быть тот цвет, который больше всего выбрали. Вот моя реализация задуманного:
from flask import Flask, request, render_template
import codecs
app = Flask(__name__)
arr = []
arrcolor = []
@app.route('/form')
def index():
    global arr
    global arrcolor
    if u'name' in request.args:
        for name in request.args:
            if name == 'name':
                arr.append(request.args[name])
        for color in request.args:
            if color == 'color':
                arrcolor.append(request.args[color])
    table = codecs.open('tables.csv', 'w', 'utf-8')
    csv = map(';'.join, zip(arr, arrcolor))
    for i in csv:
        table.write(i)
        table.write('\r\n')
    table.close()
    return render_template('form.html')
@app.route('/table')
def table_csv():
    global arr
    global arrcolor
    table = codecs.open('tables.csv', 'w', 'utf-8')
    csv = map(';'.join, zip(arr, arrcolor))
    for i in csv:
        table.write(i)
        table.write('\r\n')
    table.close()
@app.route('/stats')
def stats():
    numbers = []
    stat = codecs.open('stat.txt', 'w', 'utf-8')
    global arrcolor
    dic_count = {}
    for color in arrcolor:
        color = color.lower()
        if color in dic_count:
            dic_count[color] += 1
        else:
            dic_count[color] = 1
    for key in dic_count:
        stat.write(max(dic_count[key], key = len))
    stat.close()
        
if __name__ == '__main__':
    app.run(debug=True)

Дело в том, что когда убираю блок кода
table = codecs.open('tables.csv', 'w', 'utf-8')
    csv = map(';'.join, zip(arr, arrcolor))
    for i in csv:
        table.write(i)
        table.write('\r\n')
    table.close()
из первой функции, то страничка грузится и все работает, когда вызываю table_csv единожды. Иначе выдает ошибку.

С ключем по наибольшему численному значению я тоже запутался. Помогите, пожалуйста!

Заранее спасибо

UPD:
Актуально: ключ по наибольшему значению
FishHook
Это какой-то очень странный код.
    if u'name' in request.args:
        for name in request.args:
            if name == 'name':
                arr.append(request.args[name])
Что из себя представляет request.args?
BG
request.args - словарь
условием проверяется наличие данных в форме
в форме у меня два названия:
name - имя, которое пользователь вводит
color - его любимый цвет, который он тоже вводит

делаю это для того, чтобы одна переменная не отвечала за 2 типа введенных данных
FishHook
BG
request.args - словарь
А вот и ничего подобного, это ImmutableMultiDict.
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
	print zip(*request.args.listvalues())
	return 'Hello World!'
if __name__ == '__main__':
	app.run()
http://127.0.0.1:5000/?name=John&name=Marry&color=red&color=blue
[(u'red', u'John'), (u'blue', u'Marry')]
batChar
Как больно на ваш код смотреть. Используйте формы, как и положено. Есть Flask WTF, в гугль и не надо велосипедов строить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB