2011-08-10 20 views
23

Estoy buscando hacer que backbone.js (más jQuery) funcione con mi aplicación django, pero tengo algunas preguntas. Nunca antes había usado una configuración tranquila, así que tengo muy poco conocimiento de la forma "adecuada" de usar REST.preguntas django y backbone.js

  1. Backbone utiliza arquitectura REST, pero django no es compatible con esto por defecto. Parece que tastypie o piston son el camino a seguir para implementar una API REST. ¿Esto significa que tengo que usar la API para cualquier llamada ajax que realice a través de la red troncal? Si esto es correcto, ¿hay algún problema de rendimiento u otras rarezas que deba conocer?

  2. La mayor parte de mi aplicación django requiere autenticación. Según entiendo, una API REST no tiene ningún concepto de si un usuario está autenticado o no, entonces, ¿cómo lo manejo? ¿Todavía podré usar el decorador requerido de inicio de sesión con mis vistas o tengo que hacer algo más?

  3. ¿Qué pasa con el marco de permisos de Django, aún podré establecer/verificar permisos y grupos?

dude en responder a cada pregunta por separado o si se puede ver mi confusión general, por favor que me señale en la dirección correcta.

Parte de esto es probablemente muy noobish para muchos de ustedes, pero me ha confundido, así que gracias de antemano por su ayuda.

Respuesta

21

puede señalar colecciones/modelos de red troncal hacia cualquier urls que desee y analizar la respuesta como desee en su columna "subclases".

Model.url:

http://documentcloud.github.com/backbone/docs/backbone.html#section-43

Collection.parse:

http://documentcloud.github.com/backbone/docs/backbone.html#section-69

puede configurar controladores de solicitudes de una sola vez que pueden devolver algunos JSON para la columna vertebral para analizar/ingerir sin pistón o tastypie. Pero, sí, estas son dos buenas soluciones para REST completo con django.

Aquí hay algunos buenos consejos: http://joshbohde.com/blog/backbonejs-and-django para usar backbone con tastypie.

Con tastypie, puede limitar el acceso a la API con autorización/autenticación personalizada.

http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html

Puede crear un régimen de autorización que se asegura de que la lista de objetos se filtra a ser sólo el objeto que "posee" el usuario, algo como esto:

class PerUserAuthorization(Authorization): 
    def apply_limits(self, request, object_list): 
    if request and hasattr(request, 'user'): 
     if request.user.is_authenticated(): 
      object_list = object_list.filter(user=request.user) 
      return object_list 

    return object_list.none() 

Alternativamente/adicionalmente , puede crear recursos que solo devuelvan los objetos del usuario anulando el método ModelResource.apply_authorization_limits y asociar automáticamente al usuario con los objetos creados anulando el método obj_create, algo así como:

class PerUserModelResource(ModelResource): 

    def obj_create(self, bundle, request=None, **kwargs): 
    return ModelResource.obj_create(self, bundle, request, user=request.user) 

    def apply_authorization_limits(self, request, object_list): 
    return object_list.filter(user=request.user) 

Luego, puede heredar de PerUserModelResource y/o hacer de PerUserAuthorization la autorización para el recurso.

class ImageGroupResource(PerUserModelResource): 
    study = fields.ForeignKey(StudyResource, "study") 
    uploads = fields.ToManyField('cm.api.UploadResource', 'uploads', null=True) 

    class Meta: 
    queryset = ImageGroup.objects.all() 
    list_allowed_methods = ['get', 'post'] 
    detail_allowed_methods = ['get', 'post', 'put', 'delete'] 
    resource_name = 'cm/imagegroup' 
    authorization = PerUserAuthorization() 
    filtering = { 
     'name': ALL, 
     'created_dt': ['exact', 'range', 'gt', 'gte', 'lt', 'lte'], 
    } 

Backbone y Django-tastypie están muy bien documentados. Tómese el tiempo para construir una prueba de concepto simple y lea los documentos varias veces. Van juntos como guisantes y zanahorias.

+0

Gracias por la respuesta. ¿Qué pasa con los permisos y grupos, es posible implementarlos y usarlos? – imns

+1

seguro, solo use los mismos métodos y, en lugar de simplemente usar la identidad del usuario para aplicar límites, use el estado del grupo o las condiciones arbitrarias. –