bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django_frontend

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
django_frontend [2023/04/19 17:05]
enric_mieza_sanchez [Auth Quickstart]
django_frontend [2023/07/06 07:00] (actual)
raquel_alaman_navas
Línia 1: Línia 1:
 ====== Django framework: frontend ====== ====== Django framework: frontend ======
 + 
 [[Django]] és un framework web basat en Python molt popular. Està orientat a la rapidesa de desenvolupament, per això se'l coneix com "The web framework for perfectionists with deadlines". [[Django]] és un framework web basat en Python molt popular. Està orientat a la rapidesa de desenvolupament, per això se'l coneix com "The web framework for perfectionists with deadlines".
  
Línia 24: Línia 24:
   * [[https://docs.djangoproject.com/en/stable/topics/forms/|Treballant amb Forms]]   * [[https://docs.djangoproject.com/en/stable/topics/forms/|Treballant amb Forms]]
   * [[https://stackoverflow.com/questions/1622793/django-cookies-how-can-i-set-them|Cookies en Django]]   * [[https://stackoverflow.com/questions/1622793/django-cookies-how-can-i-set-them|Cookies en Django]]
 +  * [[Integració de Django amb React]]
  
 La documentació de Django és molt bona, tant en les referències tècniques com el [[https://docs.djangoproject.com/en/stable/intro/tutorial01/|tutorial oficial de Django]], així que seguirem aquests per anar aprofundint. La documentació de Django és molt bona, tant en les referències tècniques com el [[https://docs.djangoproject.com/en/stable/intro/tutorial01/|tutorial oficial de Django]], així que seguirem aquests per anar aprofundint.
Línia 211: Línia 212:
  
 ===== Formularis ===== ===== Formularis =====
-Per veure com fer formularis pots mirar els exemples que hem posat a l'article [[Django Lliga#formularis|Django Lliga: formularis]].+<WRAP tip> 
 +Pel //frontend// ens serà molt important la potent gestió de formularis de Django. 
 +</WRAP>
  
-\\+Referències sobre formularis: 
 +  * [[https://docs.djangoproject.com/en/stable/topics/forms/|Forms]] 
 +  * [[https://docs.djangoproject.com/en/stable/topics/forms/modelforms/|ModelForms]] 
 +  * [[https://docs.djangoproject.com/en/stable/ref/models/fields/|Fields]] : camps del Form 
 +  * [[https://docs.djangoproject.com/en/stable/ref/forms/fields/#fields-which-handle-relationships|Camps amb FKs]] 
 +  * [[https://docs.djangoproject.com/en/stable/topics/class-based-views/generic-display/|Generic Views]]: per operacions tipus CRUD genèriques es poden crear formularis molt ràpidament, ja que ens genera tant el codi de la //view// com el //template//.
  
-===== Autenticació ===== +Altres
-Pots llegir la doc oficial d'autenticació de Django+  * https://docs.djangoproject.com/en/stable/topics/http/shortcuts/
-  * https://docs.djangoproject.com/en/latest/topics/auth/+
  
-==== Auth Quickstart ==== +Un formulari sempre implica diverses passes: 
-Per anar ràpid, podem instal·lar el model sencer ''auth'' ([[https://docs.djangoproject.com/en/latest/topics/auth/default/#module-django.contrib.auth.views|llegir doc]]i totes les seves rutesTambé afegirem ''accounts/profile/'' que és la pàgina per defecte un cop fer login:+  - Crear el formulari (pot ser senzill o més complex, i necessitarà codi). 
 +  Processar les dades del formulari. 
 +  - Mostrar un resultat: pot ser senzill (operació OK), o complex (mostrar classificació). Sovint és molt pràctic fer una redirecció cap a una altre //view// i repartir la complexitat en diverses parts del codi.
  
-<file python urls.py> +Cada pas abans descrit pot necessitar el seu **template** i la seva **view**A la //view// crearem i filtrarem les dades adequades per passar-les al //template//.
-urlpatterns = [ +
-    path("accounts/", include("django.contrib.auth.urls")), +
-    path("accounts/profile/", profile, name="profile"), +
-+
-</file>+
  
-Això ens configurarà les rutes+En Django tenim, al menys, 4 aproximacions per a realitzar formularis
-<code> +  - Plantilla //hardcoded// (HTML): dona més feina però és fàcil de modificar amb coneixements bàsics de HTML. 
-accounts/login[name='login'+  - Utilitzar objecte ''Form'' de Django. Això ens facilita la renderització i el manteniment. 
-accounts/logout[name='logout'+  - Utilitzar objectes més sofisticats com ''ModelForm'' que a partir d'un model ens generarà automàticament el formulari. 
-accounts/password_change/ [name='password_change'] +  - Utilitzar [[https://docs.djangoproject.com/en/stable/topics/class-based-views/generic-display/|generic views com DetailView]] : les operacions tipus CRUD es poden fer amb aquests objectes genèrics.
-accounts/password_change/done/ [name='password_change_done'+
-accounts/password_reset/ [name='password_reset'] +
-accounts/password_reset/done[name='password_reset_done'+
-accounts/reset/<uidb64>/<token>[name='password_reset_confirm'+
-accounts/reset/done/ [name='password_reset_complete'] +
-</code>+
  
-Només ens caldrà afegir plantilles per a ''login.html'' i ''profile.html'', i tindrem a punt el sistema complert.+El processament del formulari és sempre similar (menys en el cas de les //generic views//).
  
---> Plantilla login.html (la que surt a la doc oficial)# +\\
-Aquesta és la [[https://docs.djangoproject.com/en/latest/topics/auth/default/#module-django.contrib.auth.views|plantilla de la doc oficial]] però la podeu personalitzar:+
  
-<file html templates/registration/login.html+<WRAP info
-{% extends "base.html" %}+Podeu veure mes exemples a l'article [[Django Lliga#formularis|Django Lliga: formularis]]. 
 +</WRAP>
  
-{% block content %}+\\
  
-{% if form.errors %} +===== Autenticació ===== 
-<p>Your username and password didn't match. Please try again.</p> +<WRAP info> 
-{% endif %}+En el frontend és important utilitzar la [[Django Auth]]. 
 +</WRAP>
  
-{% if next %} +\\
-    {% if user.is_authenticated %} +
-    <p>Your account doesn't have access to this page. To proceed, +
-    please login with an account that has access.</p> +
-    {% else %} +
-    <p>Please login to see this page.</p> +
-    {% endif %} +
-{% endif %} +
- +
-<form method="post" action="{% url 'login' %}"> +
-{% csrf_token %} +
-<table> +
-<tr> +
-    <td>{{ form.username.label_tag }}</td> +
-    <td>{{ form.username }}</td> +
-</tr> +
-<tr> +
-    <td>{{ form.password.label_tag }}</td> +
-    <td>{{ form.password }}</td> +
-</tr> +
-</table> +
- +
-<input type="submit" value="login"> +
-<input type="hidden" name="next" value="{{ next }}"> +
-</form> +
- +
-{# Assumes you set up the password_reset view in your URLconf #} +
-<p><a href="{% url 'password_reset' %}">Lost password?</a></p> +
- +
-{% endblock %} +
-</file> +
-<-- +
- +
-I la plantilla ''profile.html''. Aquesta no apareix a la doc, mostrem una versió mínima: +
- +
-<file html registration/profile.html> +
-Benvingut {{user}}. +
-<br> +
-<a href="/accounts/logout/?next=/accounts/login">Logout</a> +
-</file> +
- +
-A la //view// convé fixar-se en com utilitzar el **decorator @login_required**. Si no estem logats, ens farà fora i ens redirigirà cap al formulari de login. +
- +
-<file python views.py> +
-from django.contrib.auth.decorators import login_required +
- +
-@login_required +
-def profile(request): +
-    return render(request,"registration/profile.html"+
-</file>+
  
django_frontend.1681923925.txt.gz · Darrera modificació: 2023/04/19 17:05 per enric_mieza_sanchez