2012-01-14 6 views
0

Возможно ли в django/apache развернуть части приложения django одним способом, а части - в другом. Например, скажем, у меня есть интерфейс для обычных пользователей, на www.coolsite.com, но я хочу предоставить доступ к административному представлению на www.coolsite.com:1234. Это возможно в одном приложении?Развертывание интерфейса администратора на другом порту

Кроме того, возможно ли развернуть два разных приложения для Django по-разному (скажем, я хочу иметь «веб-приложение» на порту 80 и приложение «api» на порту 8888)?

Я знаю, что может переместить приложения в различные проектов, но я бы не разделить их, если я не должен (они имеют параметры и модель)

Спасибо,

ответ

1

Это рода отвечает на ваш вопрос.

В большинстве случаев я использую 3-х серверную настройку - dev, staging, production - но иногда я должен делать debug в производственном каталоге (хотя я действительно ненавижу это делать). Когда я это делаю, я часто запускаю сервер Django dev на 8000 (или что-то еще) и подключаюсь к нему.

У меня есть куча отладочной информации, которая выводится только в том случае, если порт находится в 8000..8002. Технически я запускаю совершенно другой сервер, но он использует все те же настройки/DB/code, что и производство. Я просто установил значение DEBUG_PRINT в settings.py, которое проверяет соответствующий диапазон портов.

Звучит ли это так, как будто это будет отвечать вашим потребностям?

Update:

В settings.py вы можете иметь что-то вроде этого:

ALLOW_ADMIN = '800' in HOST_PORT 

, а затем в urls.py вы можете сделать что-то вроде этого:

if settings.ALLOW_ADMIN: 
    urlpatterns += patterns((r'^admin/', include(admin.site.urls))) 
else: 
    urlpatterns += patterns((r'^admin/.*', 'views.no_admin')) 

И тогда вы можете кричите на них в views.no_admin или дайте им ссылку на другой сервер.

+0

Ну, работает отдельный сервер/экземпляр на другой может быть решением, но я бы выяснить, как блокировать запрос администратора на одном порту, а не другой. Я не говорю об отладке, хотя, но постоянное обслуживание.Я хотел бы предоставить администратору доступ к ИТ-специалистам моих клиентов. – Goro

0

Один простой способ, который я могу думать о верхней части головы, - это своего рода поворот на идею нескольких проектов. Если ваш код находится в исходной системе управления версиями (и почему бы и нет?), Тогда вы можете легко создавать отдельные отрывки одной ветви или тега и обслуживать каждый по-другому, то есть один по порту 80, один по порту 8000, один в совершенно другом домене и т. Д.

Единственное, что вам нужно сделать, это создать url.py с привязкой к чертежу (что означает, что вы проигнорируете его в исходной системе управления версиями) или, возможно, найдете способ использования что-то вроде local_urls.py (никогда не пробовал сам). В каждой версии вы можете включать/отключать URL-адреса, которые вы делаете или не хотите в этой конкретной среде. Вам нужен только администратор на порту 8000? Только поставьте этот urlpattern в тягу, подаваемую в порт 8000.

0

Вот еще один подход, который не требует нескольких процессов/проектов. Добавление компонента промежуточного слоя, как это:

class ProtectAdminMiddleware(object): 
    def process_request(self, request): 
     if request.path.startswith("/admin") and request.META["SERVER_PORT"] != "1234": 
      raise Http404 
Смежные вопросы