Найти - Пользователи
Полная версия: http редирект и пути до файлов
Начало » Python для экспертов » http редирект и пути до файлов
1 2
windoctor
Решил объеденить эти два вопроса ибо не плодить темы.

Итак первый:
Как осуществить http редирект с помощью Python, искал ответ, но пока не нашёл и поэтому использую
< .meta http-equiv='Refresh' content='1; url="url"' />
но хочеться осуществлять с помощью заголовков.

Второй вопрос:
Написал метод
def parseConfig(self, confFile):
config = ConfigParser.ConfigParser()
config.read(confFile)
try:
self["mysql_host"] = config.get('MySQL', 'host')
self["mysql_user"] = config.get('MySQL', 'user')
self["mysql_pass"] = config.get('MySQL', 'pass')
self["mysql_name"] = config.get('MySQL', 'name')
except :
print "Config File not found"
sys.exit()
Но как ни странно под вендой этод метод отработал, а вот под unix не хочет ни в какую (ругается что секция не найдена), подскажите пожалуйста как решить проблему
j2a
windoctor
Решил объеденить эти два вопроса ибо не плодить темы.

Итак первый:
Как осуществить http редирект с помощью Python, искал ответ, но пока не нашёл и поэтому использую
< .meta http-equiv='Refresh' content='1; url="url"' />
но хочеться осуществлять с помощью заголовков.
Что на сервере?

Но как ни странно под вендой этод метод отработал, а вот под unix не хочет ни в какую (ругается что секция не найдена), подскажите пожалуйста как решить проблему
Конфиг в студию
cybergrind
windoctor
def parseConfig(self, confFile):
config = ConfigParser.ConfigParser()
config.read(confFile)
try:
self["mysql_host"] = config.get('MySQL', 'host')
self["mysql_user"] = config.get('MySQL', 'user')
self["mysql_pass"] = config.get('MySQL', 'pass')
self["mysql_name"] = config.get('MySQL', 'name')
except :
print "Config File not found"
sys.exit()
Но как ни странно под вендой этод метод отработал, а вот под unix не хочет ни в какую (ругается что секция не найдена), подскажите пожалуйста как решить проблему
смотрим стэктрейс… у тебя траблы с путем до файла или с парсингом???
что у тебя делаешь метод get? если просто достает из словаря - смотрим что в словаре, и почему оно там.
скорее всего проблема или в методе get или в read, в зависимости от того, как ты получаешь данные
может быть трабл в том что различаются переходы на новую строку под линуксом и виндой

P.S. ну что это за название, где тут ООП =) назвал бы метод getOptions или в этом роде, а то недолго самому запутаться что отвечает за парсинг конфига
Cyxapeff
cybergrind
ну что это за название, где тут ООП =) назвал бы метод getOptions или в этом роде, а то недолго самому запутаться что отвечает за парсинг конфига
это тебе надо к разработчикам питона идти. Используется стандартный модуль ConfigParser.
cybergrind
я не про модуль, я про его собственный метод. хотя в конечно итоге именование не сама важная вещь ;)
windoctor
j2a
Что на сервере?
Не понял вопроса, мне нужно просто отредиректить на другой урл и всё.
Как пхп есть header ('Location: url'); вот мне нужно что-то похоже на питоне.


За критику названия метода спасибо, учёл.

Трэйс
Traceback (most recent call last):
File "/home/windoctor/www/icq-py/pir.py", line 31, in <module>
lnk.getOptions('config.ini')
File "/home/windoctor/www/icq-py/pir.py", line 16, in getOptions
self["mysql_host"] = config.get('MySQL', 'host')
File "/usr/lib/python2.5/ConfigParser.py", line 511, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'MySQL'
Сам конфиг
[MySQL]
host=locajhst
user=root
pass=python
name=py
j2a
windoctor
j2a
Что на сервере?
Не понял вопроса, мне нужно просто отредиректить на другой урл и всё.
Как пхп есть header ('Location: url'); вот мне нужно что-то похоже на питоне.
Что-то похожее:

print ‘Location: %s’ % url



Сам конфиг
[MySQL]
host=locajhst
user=root
pass=python
name=py
Код, хоть и ужасный, но рабочий. С конфигом ничего криминального. Ищи проблемы в других местах.

>>> def getOptions(config_file):
….: config = ConfigParser()
….: config.read(config_file)
….: options = {}
….: for field in ('host', ‘user’, ‘pass’, ‘name’):
….: options = config.get('MySQL', field)
….: return options
….:

>>> getOptions('/tmp/cfg')
<<<
{'mysql_host': ‘locajhst’,
‘mysql_name’: ‘py’,
‘mysql_pass’: ‘python’,
‘mysql_user’: ‘root’}
windoctor
print 'Location: %s' % url
Всё шутки шутим =)
import ConfigParser

def getOptions(config_file):
config = ConfigParser.ConfigParser()
config.read(config_file)
options = {}
for field in ('host', 'user', 'pass', 'name'):
options['mysql_%s' % field] = config.get('MySQL', field)
return options
list = getOptions ('config.ini')
print list
Не отработало, ругается
Traceback (most recent call last):
File "/home/windoctor/www/icq-py/hello.py", line 11, in <module>
list = getOptions ('config.ini')
File "/home/windoctor/www/icq-py/hello.py", line 9, in getOptions
options['mysql_%s' % field] = config.get('MySQL', field)
File "/usr/lib/python2.5/ConfigParser.py", line 511, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'MySQL'
По поводу ужасного кода, полностью согласен, первое приложение на питоне (:
playpauseandstop
Как пхп есть header ('Location: url'); вот мне нужно что-то похоже на питоне.
Apache2 mod_python Documentation
"""
internal_redirect(new_uri)
     Internally redirects the request to the new_uri. new_uri must be a string. 
     The httpd server handles internal redirection by creating a new request object and processing all request
     phases. Within an internal redirect, req.prev will contain a reference to a request object from which it
     was redirected.
"""

А вообще я б делал в лоб, через:
from mod_python import apache
def redirect_to(req, url, status_code = 302):
     """
     Usage:
         def some_view(req):
             ...
             redirect_to(req, '/path/to/uri/')
     """
     req.status_code = status_code
     req.headers_out.update({'Location': url})
     req.write('')
     return apache.OK
windoctor
playpauseandstop, проблема в том, что на сервере не установлен mod_python, скрипты выполняются в папке cgi-bin.
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