Допустимый вариант использования для администратора django? - PullRequest
11 голосов
/ 31 января 2009

Я хочу создать сайт django, где определенная группа доверенных пользователей может редактировать информацию своего профиля. Имеет ли смысл, чтобы каждый доверенный пользователь проходил через интерфейс администратора django? Я только хотел бы, чтобы они могли видеть и редактировать свою собственную информацию (очевидно). Похоже, это не соответствует тому, как люди в джанго определяют «доверие», особенно жирный бит ...

Из Книга Джанго, глава 18 :

Администратор предназначен для использования люди, которым вы, разработчик, доверяете. Это не просто означает «люди, которые были аутентифицированы », это означает что Django предполагает, что ваш контент редакторам можно доверять, чтобы поступать правильно вещь.

Это означает, что нет «одобрения» процесс редактирования контента - если вы доверяйте своим пользователям, никому не нужно одобрить их правки. Это также означает что система разрешений, в то время как мощный, не поддерживает ограничения доступ на основе объекта. Если вы доверять кому-то редактировать свои собственные истории, вы доверяете им не редактировать без разрешения других лиц.

Это один из тех вариантов использования, который подходит для административного модуля django, или это просто специализированное представление для недоверенного пользователя?

Ответы [ 6 ]

17 голосов
/ 31 января 2009

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

Что вам нужно сделать, это страница профиля пользователя. У Django уже есть хорошая система входа в систему благодаря модулю django.contrib.auth. Вы можете легко интегрировать это в свои страницы, и это именно то, что администратор Django использует для аутентификации пользователей.

Затем вам нужно будет создать простую страницу, которая предоставляет информацию о профиле конкретного пользователя в зависимости от его модели. Это должно быть относительно безболезненно, так как для этого потребуется только один просмотр и один шаблон, а шаблон может использовать преимущества ModelForms.

5 голосов
/ 31 января 2009

Я бы предложил вам создать модель Person, которая содержит OneToOneField для модели User (модель пользователя на сайте администратора). Вот как то так ..

from django.contrib.auth.models import User

    class Person(models.Model):
        """The person class FKs to the User class and contains additional user information
        including userImage, country, etc"""

        user = models.OneToOneField(User, related_name='person_fk')
        url = models.URLField(max_length=255, blank=True)
        country = models.CharField(max_length=2, blank=True)
        state = models.CharField(max_length=50, blank=True)
        zipCode = models.IntegerField(max_length=7, blank=True, null=True)
        userImage = models.ImageField(upload_to=generate_filename, blank=True, null=True)
3 голосов
/ 31 января 2009

Модель авторизации Django слишком упрощена. Это просто проверка на разрешение модели в целом.

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

После того, как вы написали один или два, вы увидите шаблон. Тогда вы можете подумать о написании собственного декоратора, чтобы справиться с этим.

def profileView( request, object_id ):
    p= Profile.objects.get( id=int(object_id) )
    if request.session['user'] != p.get_user():
        # respond with a 401 not authorized or a helpful message
    # process normally, since the session['user'] is the user for the Profile.

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

3 голосов
/ 31 января 2009

Я бы не считал редактирование своего личного профиля на веб-сайте административной задачей. Я думаю, django-profile - это то, что вы ищете.

1 голос
/ 04 февраля 2009

Существует несколько подключаемых приложений django, которые разрешают разрешения на уровне строк в вашей модели администратора. Однако я был бы более склонен написать свое собственное представление, позволяющее пользователям делать это из приложения.

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

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

1 голос
/ 01 февраля 2009

Просто для справки, вот фрагмент , демонстрирующий, как вы можете довольно легко добиться этого эффекта (пользователи могут редактировать только свои «собственные» объекты) в админке Django. Предостережение: я бы не рекомендовал делать это для профилей пользователей, проще и гибче будет просто создать свой собственный вид редактирования с использованием ModelForm.

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