Уведомления

Группа в Telegram: @pythonsu

#1 Март 16, 2013 19:27:57

qeeon12
Зарегистрирован: 2013-03-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и html

Пытаюс из формы

<html>
<head><title>my site</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body><h1>my site</h1>
    <form name='contact_us_form' action='/test.py' method='post'>
        <input placeholder="username" type='text' size=40 name='name' value='' /><br>
        <input placeholder="email" type='text' size=40 name='email' value='' /><br>
        <textarea placeholder="About" size=40 rows=20 cols=40 name='body'></textarea><br>
        <input type='submit' class='submit' value='Отправить' />
    </form>
</body></html>

Передать в скрипт

def application(environ, start_response):
        fields = cgi.FieldStorage(environ['wsgi.input'], environ=environ)
        write = start_response('404 OK', [('Content-type', 'text/html')], [('Content-type', 'text/html')])
 
        name = fields.getvalue("name")
        email = fields.getvalue("email")
        body = fields.getvalue("body")
        status = "200 OK"
        headers = [('Content-type','text/plain')]
        start_response(status, headers)

Переменные name, email, body все равно остаются пустыми в чем может быть дело?

P.S. Все это делается для того что бы записать name, email, body в SQL базу, непосредственно работа с базой ни каких затруднений не вызывает, а вот как реализовать форму ввода и вывести ее в html понять сложно…. Если есть какие-то альтернативные методы буду рад услышать

Отредактировано qeeon12 (Март 16, 2013 21:13:42)

Офлайн

#2 Март 17, 2013 08:47:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Python и html

#!/usr/bin/env python3
 
import cgi
 
print('Content-Type: text/html; charset=utf-8')
print()
 
form = cgi.FieldStorage()
for var in 'name', 'email', 'body':
    print(var, '->', form[var].value, '<br>')
попробуй такой



Офлайн

#3 Март 17, 2013 09:19:56

qeeon12
Зарегистрирован: 2013-03-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и html

Он по прежнему ругается на переменные name, email, body

File "/usr/lib/python2.7/cgi.py", line 541, in __getitem__
    raise KeyError, key
KeyError: 'name'

Может быть проблема в неправильной настройки апача? У меня локально работает apache2 на убунте, вот конфиг:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName site.local
DocumentRoot /var/www/site.local
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site.local>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On

</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

Офлайн

#4 Март 17, 2013 09:58:08

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Python и html

Вот рабочий пример, работает без апача: http://bottlepy.org/docs/dev/tutorial.html#html-form-handling

в конце нужно дописать для запуска

from bottle import run
run(host='localhost', port=8080, debug=True)

Отредактировано o7412369815963 (Март 17, 2013 09:59:28)

Офлайн

#5 Март 17, 2013 11:14:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Python и html

qeeon12
Он по прежнему ругается на переменные name, email, body
я проверял на твоей странице, у меня работает на apache
только я скрипт располагал в /var/www/cgi-bin и внутри страницы менял путь к скрипту на “cgi-bin/test.py”

можешь прочитать то, что приходит, с помощью sys.stdin.read() и вывести

qeeon12
Может быть проблема в неправильной настройки апача?
не, я думаю, ты неправильно скрипт расположил и страница неправильно на него ссылается



Отредактировано py.user.next (Март 17, 2013 11:16:16)

Офлайн

#6 Март 17, 2013 12:40:29

qeeon12
Зарегистрирован: 2013-03-13
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Python и html

Может в самом скрипте где-то ошибся, вот полный код:

import cgi
def index(req):
    thetitle = "sample"
    mysite = siteheader(thetitle)
    mysite += sitebody(thetitle)
    mysite += sitefoot()
    return mysite 
def siteheader(title):
    str = "<html><head><title>" + title + "\n"
    str += "</title></head><body>\n"
    form=cgi.FieldStorage()
    for var in 'name', 'email', 'body':
        print(var, '->', form[var].value, '<br>')
    return str
def sitefoot():
    str = "\n</body></html>"
    return str
def sitebody(title):
    str = "<h1>" + title + "</h1>\n"
    str += "<p>Hi mate!<br>\n" + \
           "This is the testing python site example.<br><br>" + \
   </a>\n"
    return str
Здесь я пытался вывести name body email из формы

Отредактировано qeeon12 (Март 17, 2013 12:42:41)

Офлайн

#7 Март 17, 2013 21:04:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Python и html

form.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
 
import cgi
 
print 'Content-Type: text/html; charset=utf-8'
print
 
form = cgi.FieldStorage()
for var in 'name', 'email', 'body':
    print var, '->', form[var].value, '<br>'

form.html
<html>
<head><title>my site</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body><h1>my site</h1>
    <form name='contact_us_form' action='cgi-bin/form.py' method='post'>
        <input placeholder="username" type='text' size=40 name='name' value='' /><br>
        <input placeholder="email" type='text' size=40 name='email' value='' /><br>
        <textarea placeholder="About" size=40 rows=20 cols=40 name='body'></textarea><br>
        <input type='submit' class='submit' value='Отправить' />
    </form>
</body></html>

1. form.py помести в cgi-bin
2. form.html помести в html
3. набери http://localhost/form.html
4. заполни поля и нажми “отправить”



Отредактировано py.user.next (Март 17, 2013 21:05:05)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version