{"conversations": [{"from": "user", "value": "Estic escrivint una aplicaci\u00f3 web amb el marc django. He escrit una funci\u00f3 d' acc\u00e9s per als usuaris. Com puc protegir l' entrada de les injecci\u00f3 SQL de la manera m\u00e9s eficient?"}, {"from": "assistant", "value": "Django ha cobert aqu\u00ed. Mai s' insereix l' entrada d' usuari en brut a les vostres consultes SQL. Sempre usa par\u00e0metres de consulta, i Django fa que aix\u00f2 sigui molt f\u00e0cil: Usuari. object.filter(username=username) # usersperill! users. txtfilter(username=username) # Safe, nom d' usuari \u00e9s un par\u00e0metre de manera que s' usa en la vostra vista: Usuari. objects.(get name=tect.Pevername' username] # username=usuari']. users. username=tectever. EXPget' username=usuari) # o b\u00e9 Django escapar\u00e0 autom\u00e0ticament el nom d' usuari i l' usar\u00e0 com a par\u00e0metre SQL, fent que sigui segur en el proc\u00e9s de consulta. De manera que sempre feu- lo en el nom d' entrada SQL, at\u00e8s que mai s' inserireu."}, {"from": "user", "value": "Quina \u00e9s la difer\u00e8ncia entre la sol\u00b7 licitud. Gaireb\u00e9 [nom d' usuari] i sol\u00b7 licitud.POblind.get(' username')?"}, {"from": "assistant", "value": "La difer\u00e8ncia entre la sol\u00b7 licitud.PANAN ['usuari] i sol\u00b7 licitud. Pget(' username') \u00e9s que l' antic s' usa per accedir al valor de la clau 'nom' de l' usuari de la petici\u00f3. El diccionari m\u00e9s r\u00e0pid, mentre que l' \u00faltim s' usa per a recuperar el valor de la clau 'usuari', amb un valor opcional si la clau no est\u00e0 trobada a la sol\u00b7 licitud. Si la clau no est\u00e0 present, l' anterior far\u00e0 cr\u00e9ixer un error, mentre que l' \u00faltim no ho far\u00e0."}, {"from": "user", "value": "Hola, germaneta?"}, {"from": "assistant", "value": ""}]}