Python Django простой сайт - PullRequest
       7

Python Django простой сайт

4 голосов
/ 09 февраля 2010

Я пытаюсь создать сайт, используя фреймворк Django. Я посмотрел учебник на сайте проекта Django, но содержит много информации, которая мне не нужна. У меня есть сценарии Python, который обеспечивает вывод, и мне нужно иметь этот вывод в Интернете. Мой вопрос заключается в том, как просто управлять Django, чтобы иметь ссылку, которая запускает скрипт и обеспечивает его вывод в Интернете, или, возможно, вы предоставляете ссылку, где я могу прочитать об этом?

Спасибо.

Ответы [ 6 ]

4 голосов
/ 09 февраля 2010

"У меня есть сценарии Python, которые обеспечивают вывод, и мне нужно, чтобы этот вывод был в Интернете."

Это не то, для чего предназначен Django.То, что вы хотите сделать, может быть достигнуто с помощью чего-то простого:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        self.wfile.write("magic content goes here")

if __name__=="__main__":
    try:
        server = HTTPServer(("", 8080), Handler)
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()

Соблюдайте линию self.wfile.write.Все, что вы пишите там, попадает в браузер.Если это имеет значение, вы можете использовать self.path в Handler, чтобы проверить, какой файл был запрошен.

Протестировано с Python 2.6.4, доступ к серверу через браузер Chrome.

1 голос
/ 09 февраля 2010

Используйте плагин mod_wsgi для Apache.

Вы можете сделать это, чтобы увидеть, как существующий скрипт может быть преобразован в приложение WSGI. Это отправная точка, чтобы показать, как работает интерфейс WSGI.

import sys
def myWSGIApp( environ, start_response ):
    with file( "temp", "w" ) as output:
        sys.stdout= output
        execfile( "some script.py" )
        sys.stdout= __stdout__

    status = '200 OK'
    headers = [('Content-type', 'text/plain')]

    start_response(status, headers)

    result= file( "temp", "r" )
    return result

Обратите внимание, что вы можете легко переписать свои скрипты, чтобы они соответствовали WSGI стандарт тоже. Это все еще не совсем лучший подход.

Если бы у вас было это

if __name__ == "__main__":
    main()

Вы просто должны добавить что-то подобное в каждый скрипт.

def myWSGIApp( environ, start_response ):
    with file( "temp", "w" ) as output:
        sys.stdout= output
        main()
        sys.stdout= __stdout__

    status = '200 OK'
    headers = [('Content-type', 'text/plain')]

    start_response(status, headers)

    result= file( "temp", "r" )
    return result

Тогда каждый скрипт вызывается как приложение WSGI и может быть подключен в основанную на WSGI инфраструктуру.

Лучший подход - переписать ваши сценарии, чтобы они не использовали sys.stdout, а записывали в файл, который был передан им в качестве аргумента.

Тестовая версия вашего сервера может быть такой простой.

from wsgiref.simple_server import make_server
httpd = make_server('', 8000, myWSGIApp)

Если у вас есть приложения WSGI для ваших скриптов, вы можете создать более умного Приложение WSGI,

  1. Разбирает URL. Обновляет среду с именем сценария для запуска.

  2. Запускает приложение WSGI в соответствующей среде.

Информацию смотрите в http://docs.python.org/library/wsgiref.html.

Затем вы можете настроить Apache для использования вашего WSGI-сервера через mod_wsgi.

Подробнее см. http://code.google.com/p/modwsgi/.

1 голос
/ 09 февраля 2010

Все правы. Это неправильный способ использовать Django. Однако, если вам нужна мера с ограничением по времени при преобразовании сценария в правильную идиому:

import sys
from django.http import HttpResponse

def cgi_view(request, my_module):
    __import__(my_module)
    mod = sys.modules[my_module]
    text = mod.main()

    resp = HttpResponse(text)
    # Then set your headers on resp
    return resp

Я оставляю это как упражнение, чтобы выяснить, как установить заголовки. Извините за лень, но мне пора идти на работу.

P.S. если ваш сценарий не предназначен для оборачивания всех своих функций, производящих вывод, в функцию main (), вы можете использовать вместо этого подпроцесс для получения вывода.

0 голосов
/ 09 февраля 2010

Джанго - это каркасная работа. Просто используйте CGI-скрипты.

0 голосов
/ 09 февраля 2010

У меня есть сценарии Python, которые обеспечивают вывод, и мне нужно иметь этот вывод в Интернете.

Для чего нужен Джанго? Используйте CGI-скрипт на python (возможно, у вас его уже есть) или WSGI-приложение (которое сложнее развернуть)

0 голосов
/ 09 февраля 2010

Это не так, как работает Django. Изучите учебник, вы сэкономите много времени и разочарований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...