Форум сайта python.su
0
- вывод html через шаблонизатор заработал
- свой обработчик urls с помощью regex заработал
теперь не могу получить данные переданные POST запросом.
Чтобы понять как извлекать данные из wsgi.input, хотел бы его просто вывести все переменные настраницу чтобы посмотреть что и как …
def whois(environ, start_response):
start_response("200 OK", [])
data = environ['wsgi.input'].read()
return [data]
Отредактировано Saytik (Окт. 11, 2013 19:07:19)
Офлайн
47
ты не там смотришь, там предложение от Ian Bicking которое не принято
смотри тут http://webpython.codepoint.net/wsgi_request_parsing_post
Офлайн
0
Спасибо, работает POST переменные выбираются, но чтобы их находило надо добавлять b'' в названии, например
environ[b'email']
def whois(environ, start_response): # the environment variable CONTENT_LENGTH may be empty or missing try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except (ValueError): request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) d = parse_qs(request_body) domainname = d.get(b'domainname')[0] # Returns the first age value. template = templ_dir.get_template('whois.html') response_body = template.render(whois_result=domainname).encode() status = '200 OK' response_headers = [('Content-Type', 'text/html'), ('Content-Length', str(len(response_body)))] start_response(status, response_headers) return [response_body]
Отредактировано Saytik (Окт. 11, 2013 23:24:34)
Офлайн
47
наверное так
domainname = d.get(b'domainname')[0].decode()
Офлайн
0
логично :-) , спасибо огромное! все ок теперь …
Офлайн
0
еще проблема возникла, при вводе в форму русского текста выдавало:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
было d = parse_qs(request_body) стало: d = parse_qs(request_body.decode()) было domainname = d.get(b'domainname')[0].decode() стало domainname = d.get(b'domainname')[0]
import sys from urllib.parse import parse_qs from cgi import escape from jinja2 import Environment, FileSystemLoader sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) templ_dir = Environment(loader=FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) def whois(environ, start_response): try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except (ValueError): request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) d = parse_qs(request_body.decode()) domainname = escape(d.get('domainname')[0]) template = templ_dir.get_template('whois.html') response_body = template.render(whois_result=domainname).encode() status = '200 OK' response_headers = [('Content-Type', 'text/html'), ('Content-Length', str(len(response_body)))] start_response(status, response_headers) return [response_body]
Отредактировано Saytik (Окт. 14, 2013 02:56:57)
Офлайн