tutorial theme template docs createsuperuser python django django-admin

python - theme - ¿Caso de uso válido para django admin?



django-admin createsuperuser (6)

El modelo de Django para la autorización es un poco demasiado simplista. Solo se trata de verificar el permiso del Modelo en su conjunto.

Para este tipo de cosas, te ves forzado a escribir tus propias funciones de vista que manejan la verificación adicional.

Después de haber escrito uno o dos, verá el patrón. Entonces puede pensar en escribir su propio decorador para manejar esto.

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.

Para que lo anterior funcione, deberá habilitar las sesiones y asegúrese de registrar al usuario en la sesión cuando inicie sesión correctamente. También necesitarás erradicar la sesión cuando cierren la sesión.

Quiero construir un sitio django donde un determinado grupo de usuarios de confianza pueda editar su información de perfil. ¿Tiene sentido hacer que cada usuario de confianza pase por la interfaz de administración de django? Solo quisiera que puedan ver y editar su propia información (obviamente). No parece que esto se ajuste a la forma en que la gente django define "confianza", especialmente el bit en negrita ...

De The Django Book, Capítulo 18 :

El administrador está diseñado para ser utilizado por personas en las que usted, el desarrollador, confía. Esto no solo significa "personas que han sido autenticadas", sino que Django supone que se puede confiar en que los editores de contenido hagan lo correcto.

Esto significa que no hay un proceso de "aprobación" para editar el contenido: si confías en tus usuarios, nadie tiene que aprobar sus ediciones. También significa que el sistema de permisos, aunque poderoso, no tiene soporte para limitar el acceso por objeto. Si confías en que alguien edite sus propias historias, confías en que no editarán las de nadie más sin permiso.

¿Es este uno de esos casos de uso que se ajusta al módulo de administración de django, o es solo una vista especializada para un usuario no confiable?


Le sugiero que cree un modelo de persona que contenga OneToOneField para el modelo de usuario (modelo de usuario del sitio de administración). Algo así como esto ..

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)


No, el administrador de Django no es adecuado para perfiles de usuario individuales, cada usuario podría ver y editar todos los demás perfiles de usuario. Esto es más adecuado para un administrador que tiene que administrar todos los usuarios a la vez.

Lo que necesita construir es una página de perfil de usuario. Django ya tiene un buen sistema de inicio de sesión cortesía del módulo django.contrib.auth. Puede integrar esto fácilmente en sus páginas, y es exactamente lo que el administrador de Django usa para autenticar usuarios.

A continuación, deberá compilar una página simple que exponga la información de perfil de ese usuario específico en función de su modelo de Usuario. Esto debería ser relativamente sencillo ya que solo requerirá una vista y una plantilla, y la plantilla puede aprovechar ModelForms.


Solo como referencia, aquí hay un fragmento que demuestra cómo puede lograr este efecto bastante fácilmente (los usuarios solo pueden editar sus propios objetos) en el administrador de Django. Advertencia: No recomendaría hacer esto para los perfiles de los usuarios, será más fácil y más flexible crear su propia vista de edición con un ModelForm.


Hay algunas aplicaciones conectables de django que permiten permisos de nivel de fila en su modelo de administrador. Sin embargo, estaría más inclinado a escribir mi propia vista que permita a los usuarios hacerlo desde dentro de la aplicación.

Tenía aspiraciones similares (usando la contribución de administrador) al diseñar la aplicación en la que estoy trabajando actualmente, pero decidí que la aplicación de administración es realmente para uso de administrador, y que a los usuarios regulares se les debe dar sus propias páginas para hacer el trabajo y la personalización ( si es requerido).

Puede generar fácilmente las vistas CRUD para un modelo particular utilizando vistas genéricas y formas de modelo, y simplemente aplicar hojas de estilo para un aspecto uniforme con el resto de su aplicación.


No consideraría la edición de mi perfil personal en un sitio web como una tarea administrativa. Creo que Django-profiles es lo que estás buscando.