Как лучше всего реализовать страницы только для администратора и особые представления для администратора на основном веб-сайте Django только для чтения? - PullRequest
2 голосов
/ 13 июня 2011

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

Для поддержки этого некоторые URL-адреса отображаются по-разному для администратора, а некоторые URL-адреса должны возвращать 404, если запрос не поступил от вошедшего в систему администратора..

Я бы предпочел не делать существование пользователя-администратора особенно очевидным для анонимных пользователей, поэтому 404 для страниц только для администратора, если пользователь еще не вошел в систему как администратор.

Мой дизайн для этого на данный момент:

  1. На уровне сервера, иметь два имени хоста в качестве псевдонимов для одного и того же сайта Django:

    • admin.example.com
    • www.example.com
  2. На уровне приложения Django для каждого представления только для администратора или для администратора оно отображается по-разному, проверьте, является ли имя хоста запроса admin.Если это:

    • , если запрос поступил от вошедшего в систему администратора, верните страницу со специфическим для администратора экраном
    • , в противном случае верните 404
  3. У вас есть URL-адрес, по которому администратор может войти вручную.

Это глупо?Мне не хватает более простого / лучшего способа сделать это?

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

На простейшем уровне вы можете использовать декоратор user_passes_test для ваших представлений, специфичных для администратора:

@user_passes_test(lambda u: u.is_superuser)
def only_admins_here(request):
    #do stuff

Или вы можете просто перейти в представлении:

def some_view(request):
    if request.user.is_superuser:
        render_to_response('admin_template.html')
    else:
        render_to_response('template.html')

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

1 голос
/ 13 июня 2011

Вы можете удалить точку 1.

  1. На уровне приложения Django для каждого представления, предназначенного только для администратора или отображаемого по-разному для администратора, проверьте, поступает ли запрос от зарегистрированного-в администраторе.

    • , если запрос поступил от вошедшего в систему администратора, верните страницу с отображением администратора
    • , в противном случае верните 404
  2. Иметь URL-адрес, по которому администратор может войти вручную.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...