Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2013 20:24:01

BG
Зарегистрирован: 2012-11-12
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask и html форма

Доброго времени суток!

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

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

<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:
Актуально: ключ по наибольшему значению

Отредактировано BG (Сен. 29, 2013 21:50:12)

Офлайн

#2 Сен. 29, 2013 22:06:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Flask и html форма

Это какой-то очень странный код.

    if u'name' in request.args:
        for name in request.args:
            if name == 'name':
                arr.append(request.args[name])
Что из себя представляет request.args?



Офлайн

#3 Сен. 29, 2013 22:14:24

BG
Зарегистрирован: 2012-11-12
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask и html форма

request.args - словарь
условием проверяется наличие данных в форме
в форме у меня два названия:
name - имя, которое пользователь вводит
color - его любимый цвет, который он тоже вводит

делаю это для того, чтобы одна переменная не отвечала за 2 типа введенных данных

Офлайн

#4 Сен. 30, 2013 11:59:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Flask и html форма

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')]



Офлайн

#5 Март 6, 2014 07:51:30

batChar
Зарегистрирован: 2013-02-27
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask и html форма

Как больно на ваш код смотреть. Используйте формы, как и положено. Есть Flask WTF, в гугль и не надо велосипедов строить.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version