2015-01-26 3 views
0

Я установил «mod_wsgi», и я экспериментирую с python на сервере. У меня есть PHP фона, поэтому я изо всех сил на создание переадресовывает на внутреннем интерфейсе другому питон файла, например:Вызов другого файла python в бэкэнд

Это мой test.py, который вызывается, когда я иду в «http://localhost/»:

def application(environ, start_response): 

    start_response("301 Redirect", [("Location", "http://localhost/test.py")]) 

    return [""] 

И «test.py»:

def application(environ, start_response): 

    status = "200 OK" 

    output = test() 

    response_headers = [('Content-type', 'text/html'), ('Content-Length', str(len(output)))] 

    start_response(status, response_headers) 

    return [output] 


def test(): 

    return "ok" 

Я не уверен, если это правильно использовать «приложение» в «test.py».

В PHP я хотел бы перенаправить пользователя на другой файл «* .php», сделать некоторые обработки и он будет работать хорошо, но я получаю эту ошибку при попытке сделать выше:

На странице ISN 't перенаправлять правильно. Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен. Эта проблема иногда может быть вызвана отключением или отказом принимать файлы cookie.

Я знаю, что могу создавать такие рамки, как Django, но я хочу это самостоятельно, поэтому я могу узнать немного больше. Итак, как я могу сделать эти перенаправления так же, как я делаю их на PHP? Каков правильный и самый pythonic способ сделать перенаправления?

Спасибо.

ответ

0

В отличие от cgi/php, где ваш веб-сервер анализирует запросы и отправляет их в соответствующие файлы сценариев, в мире wsgi есть один сценарий на основе python, который получает все запросы и отвечает за разбор и диспетчеризацию. Поэтому, когда вы переадресовываете из index.py в test.py, вы просто вызываете index еще раз, с env[PATH_INFO] равным «test.py».

Что касается общей структуры, постарайтесь не думать в терминах отдельных сценариев, как вы привыкли в php. Просто создайте приложение, разделите его на функции и модули, если это необходимо, и отметьте PATH_INFO в application(), чтобы отправить запрос соответствующей функции. Например, если ваше приложение имеет дело с пользователями, вы можете добавить user модуль и вызывать его так:

import user 

def application(environ, start_response): 
     if environ['PATH_INFO'] == '/user/create': 
      user.create() 
     if environ['PATH_INFO'] == '/user/delete': 
      user.delete() 
+0

Спасибо за информацию. Теперь я знаю, почему я получаю эту ошибку от firefox, мой скрипт будет постоянно называть «index.py» каждый раз. То, что я не получаю: как мне отправить? Вы написали, что я должен вызывать «index» с «env [PATH_INFO]», равным «test.py». И после этого? Как я могу вызвать файл test.py для его выполнения? И действительно ли мне нужен «метод приложения» в «test.py»? Благодарю. – Falcon

+0

@Falcon: ответил на сообщение – georg

+0

Спасибо! Я думал, что могу сделать это точно так же, как в php, вместо того, чтобы раньше знать всю структуру приложения и «сопоставлять» его внутри «index.py» или «отображать» его, пока я его создаю. – Falcon

Смежные вопросы