[Py-MAD] ¿Foro integrable en django?

lasizoillo lasizoillo at gmail.com
Sun Dec 9 01:50:08 CET 2018


Buenas,

Respondo entre lineas.

DISCLAIMER: Hace años que no hago nada con django, pero creo que no va a
hacer falta para esto

El vie., 7 dic. 2018 a las 21:49, César García Tapia (<tapia at openshine.com>)
escribió:

> ¡Hola!
>
> Ando buscando un foro que pueda integrar en una aplicación ya existente en
> Django. "Integrar" en este caso significa:
>
> - Poder usar nuestro propio modelo de usuario ya existente.
>

Me resultaría muy raro uno en el que no puedas usar tu propio modelo ya
existente (tras los debidos ajustes) o incluso integrar la autenticación
con Ldap u OAUTH. Hay que ser muy cutre para hacer una aplicación que no
permita esto, otra cosa es que no esté documentado.


> - Que la sesión creada en el foro se mantenga en la aplicación y
> viceversa, sin necesidad de autenticarse por separado.
>

Supongo que el foro se ejecuta en el mismo proceso todo y les vas a dar el
mismo dominio para que compartan la cookie de autorización ¿no? Si es así
este requisito sobra, si no es así habrá que hacer un poco de "magia", pero
se puede hacer.


> - Idealmente, que si necesitamos alguna funcionalidad custom, podamos
> hacerlo con plugins, sin necesidad de forkear nuestra propia versión del
> foro.
>

¿Qué sería funcionalidad custom? No es lo mismo algo que se pueda hacer con
un par de queries en el context request que algo que afecte a los
requisitos intrínsecos de un foro. Supongo que ya habrás visto esta página
pero la pongo por si acaso:

https://djangopackages.org/grids/g/forums/

Aquí se listan algunas funcionalidades muy genéricas: pre-moderación,
post-moderación, notificaciones,... Esta lista debería ser la importante
para ayudarte para ver qué está cubierto y qué no. Normalmente las cosas
demasiado plugables acaban convirtiéndose en infiernos para la
escalabildad, casi es mejor buscar un framework que un "lo hago todo pero
nada bien".

De todas formas, si el foro está varias separado en subapps (y estas tienen
bajo acoplamiento), es posible que solo forkeando una de ellas tengas lo
que necesites minimizando el dolor.


> - Y ya si el foro fuera medianamente modernillo y no recordara a
> forocoches o a un phpBB de hace 20 años, me haríais feliz. :-)
>

Muy mal se tiene que dar la cosa para que no esté hecho con plantillas y
pueda personalizarse. Pero si, que por defecto sean bonicas es un plus ;-)


>
> Opciones que hemos medio descartado:
>
> - Misago [1] parece muy majo, tiene bastante comunidad y el desarrollo
> está activo, pero es una aplicación completamente standalone. Ni permiten
> la integración ni se lo plantean a futuro.
>

"Ni permiten la integración, ni se lo plantean a futuro", ni falta que hace
(añadiría yo). La verdad es que tras revisar el código fuente creo que la
documentación buena es el código fuente.

Versión fácil:
-------------------
Si tiene integración para registrarse con github (como puede verse en el
propio foro del proyecto) seguro que puedes cambiar el proceso de registro
para que se autentique contra tu otra aplicación y tenerlo en un plis. Eso
si, con un nivel de integración con tu aplicación bastante bajo (olvídate
de urls del tipo reverse("delaotraapp:index") si no haces un trabajo de
duplicación), pero tirando a muy sencillo de mantener.

https://misago.gitbook.io/docs/socialauth

Versión dificil:
--------------------

La integración es más cuestión de documentación que de implementación. Y la
verdad es que esa documentación, si fuese el dueño del proyecto, como mucho
la pondría en un link o un apéndice para que no echase para atrás a futuros
usuarios porque es algo tedioso.

Si miras el código fuente verás que en efecto usan su propio modelo de
usuario:
https://github.com/rafalp/Misago/blob/master/devproject/settings.py#L159

Y es normal que lo hagan porque hacen bastantes cosas con el:
https://github.com/rafalp/Misago/blob/master/misago/users/models/user.py#L133

Pero hay algo que da muy buena espina y es que no han hardcodeado el modelo
sino que parece que han tenido cuidado:
https://github.com/rafalp/Misago/blob/master/misago/users/models/user.py#L488

No conozco tu modelo, pero el objetivo para hacer la integración es adaptar
tu modelo con todas las cosas que necesita el foro y hacer la migración. No
se si usas directamente el modelo de usuario de django (te va a tocar
migrar a tu modelo propio modelo de usuario) o tienes tu propio modelo de
usuario (que va a ser más fácil porque "solo" vas a tener que añadirle lo
que necesita misago (ojo cuidado que nos complica la mantenibilidad, pero
por lo demás todo va a quedar integrado a tope).

Ojito que misago usa su propio authentication backend:
https://github.com/rafalp/Misago/blob/master/misago/users/authbackends.py#L32

No parece nada del otro mundo, pero es posible que si te calzas ese
"truqui" del select related que hace se degraden las queries al foro.
Apúntate también todos los modelos relacionados con el usuario por si te
toca crearlos en el script de migrate. Yo me apunto el truqui ese del
select-related por si me toca hacer una app django un día de estos, me ha
gustado para quitar queries innecesarias.

Y hablando de los scripts de migrate, que sepas que cuando se lancen los
scripts de migrate al dar de alta las apps de misago en tu proyecto se van
a crear las foreign keys según tengas configurado tus settings, por si
pensabas hacer una salida en oculto del foro y luego migrar el modelo de
usuario más adelante cuando estés convencido con el resultado:
https://github.com/rafalp/Misago/blob/master/misago/users/migrations/0001_initial.py#L181

Si quieres hacer salidas en oculto te recomiendo un feature flipper
(django-waffle me hizo feliz en su día):
https://djangopackages.org/grids/g/feature-flip/

También quedaría el tema de adaptar el registro de usuarios (que supongo
querrás unificar en un solo sitio). Esto sería algo que corre también de tu
cuenta personalizar. Teniendo un api como tienen seguro que puedes
integrarlo fácil en tu proceso de registro. Y sería cosa de capar esa
funcionalidad del foro.

Luego está el tema de personalizar estilos de templates (evitar el efecto
frankenweb), incluir urls, escribir los nuevos settings, ... Y todo esto
teniendo en cuenta la que se te puede liar en cada actualización porque
tienes que repasar las personalizaciones. Cuanta más integración quieras,
más dolor al actualizar. Hay cosas que parecen fáciles de integrar, como el
tema de añadir más secciones a la visualización del profile, a la edición
de profile o pestañas en el listado de usuarios (por ejemplo filtrar por
departamento). Y a pesar de eso está tan penósamente documentado que lo vi
mirando el código, es posible que haya más cosas fáciles de personalizar
que no te obliguen a hacer forks.

Pero vamos todo esto es algo que podría llevarte un par de días según
algunos, vamos a decir un par de semanas para que esté todo bien pulido
(testeos de migración, personalizar templates, empollarse bien el proyecto,
revisar que no cause problemas en tu app,...):
https://misago-project.org/t/looking-for-a-forum-solution/564/post/2725/

No he mirado los demás. Pero viendo el código de este así en un ratillo
parece bastante posible hacer lo que pides, que también es cierto que a
nivel funcional has dicho bastante poco. Gracias por poner el link, me ha
gustado mucho curiosear el código y ver como resuelve algunos temas
difíciles con bastante calidad ;-)



> - Spirit [2] tiene bastantes estrellas en github, pero apenas tiene
> documentación. No he encontrado la forma de ver si permite hacer algo de lo
> que necesitamos.
> - Django-machina [3] parece que sí permite cierto nivel de integración,
> pero la mecánica del foro es algo viejuna. A pesar de eso, parece la opción
> más viable.
>
> Por otro lado, otra opción es usar otro software, tipo Discourse, y tratar
> de integrarlo con un single sign-on o algo parecido, pero preferiría
> evitarlo. Implicaría desplegar un entorno completamente distinto, otra base
> de datos, programar extensiones en otro lenguaje y framework... No suena a
> buena idea.
>
> A ver si se os ocurre algo que podamos usar. ¡¡Muchas gracias!!
>
> César.
>
> [1] https://github.com/rafalp/misago
> [2] https://github.com/nitely/Spirit
> [3] https://github.com/ellmetha/django-machina
> _______________________________________________
> Asociación Python España: http://www.es.python.org/
> Python Madrid: http://www.python-madrid.es/
> Madrid mailing list
> Madrid at lists.es.python.org
> https://lists.es.python.org/listinfo/madrid
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.es.python.org/pipermail/madrid/attachments/20181209/e5fd6abd/attachment.html>


More information about the Madrid mailing list