Развернуть интерфейс администратора на другом порту - PullRequest
0 голосов
/ 14 января 2012

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

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

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

Спасибо

Ответы [ 3 ]

1 голос
/ 14 января 2012

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

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

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

Похоже ли это на то, что вам нужно?

Обновление:

В 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 голосов
/ 25 декабря 2012

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

class ProtectAdminMiddleware(object):
    def process_request(self, request):
        if request.path.startswith("/admin") and request.META["SERVER_PORT"] != "1234":
            raise Http404
0 голосов
/ 14 января 2012

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

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

...