Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 19, 2015 13:50:14

serrrgggeee
Зарегистрирован: 2014-03-31
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерирование веб формы

Здравствуйте изучаю питон по Лутцу, там есть раздел веб программирование вот код

"""
Реализует веб-интерфейс для просмотра и изменения экземпляров классов
в хранилище; хранилище находится на сервере (или на том же компьютере,
если используется имя localhost)
"""
import cgi, shelve, sys, os	# cgi.test() выведет поля ввода
shelvename = 'class-shelve'	# файлы хранилища находятся
				# в текущем каталоге
fieldnames = ('name', 'age', 'job', 'pay')
form = cgi.FieldStorage()	#парсинг данных формы
print('Content-type: text/html')#заголовок + пустая строка для ответа
sys.path.insert(0, os.getcwd()) #благодаря этому модуль pickle
				#и сам сценарий будут способны
				#импортировать модуль person
# главный шаблон разметки html
replyhtml = """
<html>
<title>People Input Form</title>
<body>
<form method=POST action="peoplecgi.py">
    <table>
    <tr><th>key<td><input type=text name=key value="%(key)s">
    $ROWS$
    </table>
    <p>
    <input type=submit value="Fetch", name=action>
    <input type=submit value="Update", name=action>
</form>
</body></html>
"""
# вставить разметку html с данными в позицию $ROWS$
rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
rowshtml = ''
for fieldname in fieldnames:
    rowshtml += (rowhtml % ((fieldname,) * 3))
replyhtml = replyhtml.replace('$ROWS$', rowshtml)
def htmlize(adict):
    new = adict.copy()				#значения могут содержать &, >
    for field in fieldnames:			#и другие специальные символы,
        value = new[field]   	  		#отображаемые особым образом;
        new[field] = cgi.escape(repr(value))	#их необходимо экранировать
    return new
def fetchRecord(db, form):
    try:
        key = form['key'].value
        record = db[key]
        fields = record.__dict__		# для заполнения строки ответа
        fields['key'] = key			# использовать словарь атрибутов
    except:
        fields = dict.fromkeys(fieldnames, '?')
        fields['key'] = 'Missing or invalid key!'
    return fields
def updateRecord(db, form):
    if not 'key' in form:
        fields = dict.fromkeys(fieldnames, '?')
        fields['key'] = 'Missing key input!'
    else:
        key = form['key'].value
        if key in db:
            record = db[key] 		# изменить существующую запись
	    else:
	        from person import Person 	# создать/сохранить новую
                record = Person(name='?', age='?') 	# eval: строки должны быть
					    # заключены в кавычки
            for field in fieldnames:
	            setattr(record, field, eval(form[field].value))
            db[key] = record
            fields = record.__dict__
            fields['key'] = key
        return fields
db = shelve.open(shelvename)
action = form['action'].value if 'action' in form else None
if action == 'Fetch':
    fields = fetchRecord(db, form)
elif action == 'Update':
    fields = updateRecord(db, form)
else:
    fields = dict.fromkeys(fieldnames, '?')	 # недопустимое значение
    fields['key'] = 'Missing or invalid action!' # кнопки отправки формы
db.close()
print(replyhtml % htmlize(fields))  # заполнить фо
здесь есть код где генерируется форма почемуто он не работает, да и я не могу разобраться, если есть желание разъясните

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version