[Python编程(第4版)].(Programming.Python.4th.Edition).Mark.Lutz.文字版

(yzsuai) #1

def pageheader(app='PyMailCGI', color='#FFFFFF', kind='main', info=''):
print('Content-type: text/html\n')
print('%s: %s page (PP4E)' % (app, kind))
print('

%s %s


' % (color, app, (info or kind)))


def pagefooter(root='pymailcgi.html'):
print('


')
print('<img src="../PythonPoweredSmall.gif" ')
print('align=left alt="[Python Logo]" border=0 hspace=15>
')
print('Back to root page' % root)
print('')


def formatlink(cgiurl, parmdict):
"""
make "%url?key=val&key=val" query link from a dictionary;
escapes str() of all key and val with %xx, changes ' ' to +
note that URL escapes are different from HTML (cgi.escape)
"""
parmtext = urllib.parse.urlencode(parmdict) # calls parse.quote_plus
return '%s?%s' % (cgiurl, parmtext) # urllib does all the work


def pagelistsimple(linklist): # show simple ordered list
print('

    ')
    for (text, cgiurl, parmdict) in linklist:
    link = formatlink(cgiurl, parmdict)
    text = cgi.escape(text)
    print('
  1. \n %s' % (link, text))
    print('
')


def pagelisttable(linklist): # show list in a table
print('

') # escape text to be safe
for (text, cgiurl, parmdict) in linklist:
link = formatlink(cgiurl, parmdict)
text = cgi.escape(text)
print('
View\n %s' % (link, text))
print('
')


def listpage(linkslist, kind='selection list'):
pageheader(kind=kind)
pagelisttable(linkslist) # [('text', 'cgiurl', {'parm':'value'})]
pagefooter()


def messagearea(headers, text, extra=''): # extra for readonly
addrhdrs = ('From', 'To', 'Cc', 'Bcc') # decode names only
print('

')
for hdr in ('From', 'To', 'Cc', 'Subject'):
rawhdr = headers.get(hdr, '?')
if hdr not in addrhdrs:
dechdr = parser.decodeHeader(rawhdr) # 3.0: decode for display
else: # encoded on sends
dechdr = parser.decodeAddrHeader(rawhdr) # email names only
val = cgi.escape(dechdr, quote=1)
print('
%s:' % hdr)
print('
<input type=text ')
print(' name=%s value="%s" %s size=60>' % (hdr, val, extra))


1288 | Chapter 16: The PyMailCGI Server