Найти - Пользователи
Полная версия: Не работает cgi-сценарий
Начало » Python для новичков » Не работает cgi-сценарий
1 2 3
kozlo22
py.user.next
-rwxrwxrwx 1 anton anton   261 июля   7 14:25 cgi101.py
-rwxrwxrwx 1 anton anton 12288 июля  10 16:10 class-shelve.db
-rwxrwxrwx 1 anton anton  2235 июля  11 12:28 peoplecgi.py
Вот скрипт:
#!usr/bin/python3
import cgi, shelve, sys, os
shelvename = 'class-shelve'
fildnames = ('name', 'age', 'job', 'pay')
form = cgi.FieldStorage()
print('Content-type: text/html\n')
sys.path.insert(0, os.getcwd())
#главный шаблон разметки 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>
"""
#вставить разметку с данными в позицию $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 fielnames:
        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='?')
            
        for field in fieldnames:
            settatr(record, field, eval(form[field].value()))
        db[key] = record
        fields = record.__dict__
        fields['key'] = key
    return fields
db = shelve.open(shelvname)
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))
py.user.next
#!/usr/bin/python3
 
import cgi, shelve, sys, os
 
shelvename = 'class-shelve'
fieldnames = ('name', 'age', 'job', 'pay')
 
form = cgi.FieldStorage()
print('Content-type: text/html\n')
 
sys.path.insert(0, os.getcwd())
 
#главный шаблон разметки 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>
"""
#вставить разметку с данными в позицию $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='?')
        for field in fieldnames:
            settatr(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))

[guest@localhost cgi-bin]$ ll peoplecgi.py class-shelve 
-rw-r--r-- 1 apache apache 16384 июля 12 14:15 class-shelve
-rwxr--r-- 1 apache apache 2232 июля 12 14:42 peoplecgi.py
[guest@localhost cgi-bin]$

там было неправильно переписано, с пропущенными буквами
этот вариант запускает скрипт, но база пустая, поэтому оно там пишет, что поля неизвестны
kozlo22
py.user.next
работает.
Еще раз спасибо Вам.
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