Найти - Пользователи
Полная версия: Python и html
Начало » Python для экспертов » Python и html
1
qeeon12
Пытаюс из формы

<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 понять сложно…. Если есть какие-то альтернативные методы буду рад услышать
py.user.next
#!/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>')
попробуй такой
qeeon12
Он по прежнему ругается на переменные 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>
o7412369815963
Вот рабочий пример, работает без апача: http://bottlepy.org/docs/dev/tutorial.html#html-form-handling

в конце нужно дописать для запуска
from bottle import run
run(host='localhost', port=8080, debug=True)
py.user.next
qeeon12
Он по прежнему ругается на переменные name, email, body
я проверял на твоей странице, у меня работает на apache
только я скрипт располагал в /var/www/cgi-bin и внутри страницы менял путь к скрипту на “cgi-bin/test.py”

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

qeeon12
Может быть проблема в неправильной настройки апача?
не, я думаю, ты неправильно скрипт расположил и страница неправильно на него ссылается
qeeon12
Может в самом скрипте где-то ошибся, вот полный код:
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 из формы
py.user.next
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. заполни поля и нажми “отправить”
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