Запуск тестового сервера Django под скрученной паутиной

Поскольку я пишу приложение, которое использует скрученный веб для обслуживания асинхронных запросов и Django для обычной доставки контента, я подумал, что было бы неплохо, если бы оба запускались под одним и тем же скрученным реактором через интерфейс WSGI Django.

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

Следовательно, я решил написать обходной путь и создать базу данных и загрузить фикстуры по первому запросу, что нормально для тестового сервера. Вот (урезанный) скрипт, который я использую:

import os, sys
import django.core.handlers.wsgi

from django.core.management import call_command
from django.db import connection

from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
from twisted.web.server import Site

sys.path.append('/path/to/myapp')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

_app = django.core.handlers.wsgi.WSGIHandler()
initialized = False
fixtures = (...) # Put your fixtures path here

def app(e,sr):
  global initialized

  if not initialized:
    connection.creation.create_test_db(verbosity=1)
    call_command('loaddata', *fixtures, verbosity=1)
    initialized = True

  return _app(e,sr)

res = WSGIResource(reactor, reactor.getThreadPool(), app)
factory = Site(res)
reactor.listenTCP(8888, factory)

  reactor.run()

Я знаю, что это немного хак, поэтому, если у вас есть лучшее решение, сообщите об этом здесь.

Спасибо.


person Cristiano Paris    schedule 27.01.2010    source источник


Ответы (1)


Это может быть именно то, что вы ищете: http://github.com/clemesha/twisted-wsgi-django

person clemesha    schedule 28.01.2010
comment
Спасибо за ссылку. Я не пробовал, но думаю, что это не решает проблему запуска сайта django в тестовом режиме. Или это так? - person Cristiano Paris; 28.01.2010