sistema password loginview example custom create change python django model-view-controller django-templates

python - password - django user model



Django ¿es mejor verificar user.is_authenticated en views.py o en template? (3)

TL; DR

La lógica debería estar en su código python, no en su plantilla tanto como sea posible. Debido a razones de mantenimiento y a prueba de futuro .

Elaborar

  • Calidad de código : puede probar su lógica de negocio cuando está en su python, no cuando está en plantillas. Los primeros mejoran la calidad de tu código y tu valor como desarrollador;
  • A prueba de futuro : no sabe qué tecnología usará su aplicación en el futuro, por lo que evitar la mezcla tecnológica le ayudará a actualizarla (podrá actualizar a diferentes ritmos).
  • Principios de separación de preocupaciones : ¿quieres un código que sea un plato de espagueti, donde no puedas refactorizar una cosa sin impactar a otras diez?
  • Legado del código : no sabe quién va a trabajar en su código ni en qué código va a trabajar. No lo haga difícil para ellos (probablemente sea su ser futuro);
  • Código limpio : que se expresa en un solo dialecto siempre es mejor que mezclar idiomas;
  • Alcance del conocimiento : el front-end a menudo es responsabilidad de personas con poca capacidad de programación (HTML / CSS son declarativos) y no desea que se mezclen con su lógica comercial.

Tengo una página de inicio, que quiero mostrar un formulario de inicio de sesión cuando el usuario no está conectado o mostrar una lista de elementos que pertenecen a ese usuario si él / ella ya inició sesión.

Hasta ahora, se me ocurrieron dos métodos:

  1. Compruebe si el usuario está autenticado en views.py y renderiza la vista correspondiente (en mi views.py ):

    if request.user.is_authenticated(): return render(request, ''items.html'') else return render(request, ''login.html'')

  2. Verifique directamente en la plantilla y genere el HTML correspondiente para cada caso (en mi index.html ):

    {% if user.is_authenticated %} HTML for my items list {% else %} HTML for my login form {% endif %}

Pregunta

Entonces, ¿qué método es mejor para manejar esto? ¿Son esos métodos difieren mucho en el rendimiento? ¿Hay algún estándar que deberíamos manejar estos en views.py o en la plantilla en sí?


Depende de tu html Si desea cambiar solo una pequeña parte de su código en función de la condición, verifique dentro de una plantilla:

{% if user.is_authenticated %} <h3>Welcome</h3> {% else %} <a href="/path/to/login">Login</a> {% endif %}

Pero si items.html y login.html son plantillas diferentes y grandes, definitivamente debe hacer el inicio de sesión dentro de su vista.


No creo que haya una gran diferencia de rendimiento. Lo más importante es cuánto debe ajustarse al patrón MVC .

Una template solo pretende mostrar algún tipo de datos que proporciona la view . Cualquier tipo de lógica, como decidir qué tipo de datos mostrar en función del estado del solicitante, siempre debe ser implementada por la vista. Por lo tanto, debe mover su lógica a la función de vista para la limpieza de su diseño.