{"title":"Scrivere la tua prima patch per Django","version":"4.1","locale":"it","docname":"intro/contributing","url":"/it/4.1/intro/contributing/","canonical":"https://djangodocs.dev/it/4.1/intro/contributing/","summary":"Introduzione Link to this heading # Ti interessa restituire qualcosa alla comunità? Potresti avere trovato un bug in Django che ti piacerebbe vedere corretto, o ci…","html":"<h1>Scrivere la tua prima patch per Django<a class=\"heading-anchor\" href=\"#writing-your-first-patch-for-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"introduction\">\n<h2>Introduzione<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ti interessa restituire qualcosa alla comunità? Potresti avere trovato un bug in Django che ti piacerebbe vedere corretto, o ci potrebbe essere una piccola funzionalità che vorresti fosse aggiunta.</p>\n<p>Contribuire a Django è il miglior modo per affrontare le tue preoccupazioni. All’inizio questo può scoraggiare ma si tratta di un percorso «battuto» con la documentazione, i tool e la community, che ti supporta. Ti accompagneremo nell’intero processo, in modo che tu possa apprendere con degli esempi.</p>\n<section id=\"who-s-this-tutorial-for\">\n<h3>Per chi è questo tutorial?<a class=\"heading-anchor\" href=\"#who-s-this-tutorial-for\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Vedi anche</p>\n<p>Se cerchi riferimenti sui dettagli per contribuire al codice, vedi la documentazione <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/\"><span class=\"doc\">Writing code</span></a></p>\n</aside>\n<p>Per questo tutorial, ci aspettiamo che tu abbia almeno una comprensione di base di come lavora Django. Questo significa che devi essere a tuo agio nel muoverti tra i tutoria esistenti in <a class=\"reference internal\" href=\"/it/4.1/intro/tutorial01/\"><span class=\"doc\">writing your first Django app</span></a>. Inoltre devi avere una buona conoscenza di Python. Se non ce l’hai, <a href=\"#id11\"><span class=\"problematic\" id=\"id12\">`Dive Into Python`__</span></a> è un libro online fantastico (e gratuito) per programmatori Python alle prime armi.</p>\n<p>Quelli di voi che non hanno familiarità con i sistemi di controllo di versione e con Trac troveranno che questo tutorial e i suoi link includono le informazioni necessarie per cominciare. Comunque, se prevedete di contribuire a Django regolarmente, probabilmente vorrete leggere di più riguardo questi strumenti.</p>\n<p>Nelle intenzioni, questo tutorial tenta di spiegare il più possibile, per essere di aiuto alla maggior parte dei lettori.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Dove trovare aiuto:</p>\n<p>Se hai problemi a seguire questo tutorial, lascia un messaggio in <a class=\"reference internal\" href=\"/it/4.1/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> o fai un salto su <a href=\"#id11\"><span class=\"problematic\" id=\"id13\">`#django-dev su irc.libera.chat`__</span></a> per chattare con altri utenti Django che potrebbero aiutarti.</p>\n</aside>\n</section>\n<section id=\"what-does-this-tutorial-cover\">\n<h3>Di che parla questo tutorial?<a class=\"heading-anchor\" href=\"#what-does-this-tutorial-cover\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ti istruiremo su come inviare per la prima volta una patch per Django. Alla fine di questo tutorial, sarai in grado di capire sia quali strumenti che quali processi sono utilizzati. In particolare, comprenderemo i seguenti:</p>\n<ul class=\"simple\">\n<li><p>Installazione di Git.</p></li>\n<li><p>Scarica una copia della versione di sviluppo di Django</p></li>\n<li><p>Eseguire la suite di test di Django.</p></li>\n<li><p>Scrivere un test per la tua patch.</p></li>\n<li><p>Scrivere il codice per la tua patch.</p></li>\n<li><p>Provare la tua patch.</p></li>\n<li><p>Mandare una pull request.</p></li>\n<li><p>Dove cercare per ulteriori informazioni.</p></li>\n</ul>\n<p>Una volta terminato il tutorial, puoi dare un’occhiata al resto della <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/\"><span class=\"doc\">Django’s documentation on contributing</span></a>. Contiene moltissime informazioni utili ed è una lettura imperdibile per chiunque voglia contribuire regolarmente a Django. Se hai delle domande, li probabilmente ci sono le risposte.</p>\n<aside class=\"admonition-python-3-required admonition\">\n<p class=\"admonition-title\">E” necessario Python 3!</p>\n<p>La versione correnti di Django non sopporta Python 2.7. Scarica Python 3 da <a class=\"reference external\" href=\"https://www.python.org/downloads/\">Python’s download page</a> oppure attraverso il packet manager del tuo sistema operativo.</p>\n</aside>\n<aside class=\"admonition-for-windows-users admonition\">\n<p class=\"admonition-title\">Per gli utenti Windows</p>\n<p>Vedi <a class=\"reference internal\" href=\"/it/4.1/howto/windows/#install-python-windows\"><span class=\"std std-ref\">Installa Python</span></a> sulla documentazione di Windows per una guida aggiuntiva.</p>\n</aside>\n</section>\n</section>\n<section id=\"code-of-conduct\">\n<h2>Codice di Condotta<a class=\"heading-anchor\" href=\"#code-of-conduct\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Come contributor, puoi aiutarci a tenere la Django community open e inclusa. Per favore leggi e segui i nostri  <a class=\"reference external\" href=\"https://www.djangoproject.com/conduct/\">Code of Conduct</a>.</p>\n</section>\n<section id=\"installing-git\">\n<h2>Installazione di Git<a class=\"heading-anchor\" href=\"#installing-git\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Per questo tutorial, necessiterai di avere Git installato in modo da poter scaricare l’attuale versione per lo sviluppo di Django, e creare files per le modifiche che effettui.</p>\n<p>Per verificare se hai installato Git, inserisci «git» nella riga di commando. Se ricevi come risposta che questo commando non può essere trovato, dovrai scaricarlo ed installarlo, vai alla «pagina del download di Git»__.</p>\n<p>Se non hai molta confidenza con Git, puoi sempre trovare informazioni riguardo ai suoi comandi (una volta installato) digitando «git help» nella riga di commando.</p>\n</section>\n<section id=\"getting-a-copy-of-django-s-development-version\">\n<h2>Ottenere una copia della versione di sviluppo di Django<a class=\"heading-anchor\" href=\"#getting-a-copy-of-django-s-development-version\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il primo passo per contribuire a Django è ottenere una copia del codice sorgente.\nPrima, fare il fork : <a class=\"reference external\" href=\"https://github.com/django/django/fork\">fork Django on GitHub</a>. Dopo, dalla riga di commando, utilizza il comando «cd» per navigare fino alla directory dove vorrai posizionare la tua copia locale di Django.</p>\n<p>Scaricare la repository del codice sorgente Django usando il seguente comando</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>clone<span class=\"w\"> </span>https://github.com/YourGitHubName/django.git\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git clone https://github.com/YourGitHubName/django.git\n</code></pre></div></div></div>\n<aside class=\"admonition-low-bandwidth-connection admonition\">\n<p class=\"admonition-title\">Connessione lenta?</p>\n<p>Puoi aggiungere l’argomento «–depth 1» a «git clone» per saltare il download della cronologia commit di Django che riduce il trasferimento di dati da ~250 MB a ~70 MB.</p>\n</aside>\n<p>Ora che hai una copia in locale di Django, puoi installarlo come installeresti qualunque altro pacchetto usando <code class=\"docutils literal notranslate\"><span class=\"pre\">pip</span></code>. Il modo più pratico per farlo è usando un <em>ambiente virtuale</em>, ovvero una feature all’interno di Python che ti permette di tenere separata una cartella di ogni pacchetto installato per ognuno dei tuoi progetti cosicché non interferiscano tra loro.</p>\n<p>È una buona idea mantenere tutti i tuoi ambienti virtuali in un unico posto, per esempio in <code class=\"docutils literal notranslate\"><span class=\"pre\">.virtualenvs/</span></code> all’interno della home.</p>\n<p>Crea un nuovo ambiente virtuale avviando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python3<span class=\"w\"> </span>-m<span class=\"w\"> </span>venv<span class=\"w\"> </span>~/.virtualenvs/djangodev\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m venv <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\n</code></pre></div></div></div>\n<p>Il percorso è dove il nuovo environment verrà salvato sul tuo computer.</p>\n<p>Il passaggio finale nel settare il tuo ambiente virtuale è attivare:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">source</span><span class=\"w\"> </span>~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>Se il commando  <code class=\"docutils literal notranslate\"><span class=\"pre\">source</span></code>  non è disponibile, puoi invece usare un punto:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>.<span class=\"w\"> </span>~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>Devi attivare il virtual environment tutte le volte che apri una nuova finestra del terminale.</p>\n<aside class=\"admonition-for-windows-users admonition\">\n<p class=\"admonition-title\">Per gli utenti Windows</p>\n<p>Per attivare il tuo ambiente virtuale su Windows, avvia:</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\\Scripts\\activate.bat\n</code></pre></div>\n</aside>\n<p>Il nome dell’ambiente virtuale attualmente attivo è mostrato sulla linea di comando per aiutarti a tenere in mente quale stai usando. Tutto ciò che installi usando «pip» mentre questo nome è mostrato verrà installato in quell’ambiente virtuale, isolato da altri ambienti e dai pacchetti del sistema.</p>\n<p id=\"intro-contributing-install-local-copy\">Procedi e installa la copia precedentemente clonata di Django:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-e<span class=\"w\"> </span>/path/to/your/local/clone/django/\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -e \\path\\to\\your\\local\\clone\\django\\\n</code></pre></div></div></div>\n<p>La versione installata di Django, in versione modificabile, ora punta alla tua copia locale. Vedrai immediatamente alcuni dei cambiamenti che vi apporterai, il che ti sarà di grande aiuto quando scriverai la tua prima patch.</p>\n<section id=\"creating-projects-with-a-local-copy-of-django\">\n<h3>Creazione di progetti con una copia locale di Django<a class=\"heading-anchor\" href=\"#creating-projects-with-a-local-copy-of-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Può essere utile testare i tuoi cambiamenti in locale con un progetto Django. Prima di tutto devi creare un nuovo virtual environment, <a class=\"reference internal\" href=\"#intro-contributing-install-local-copy\"><span class=\"std std-ref\">installare la copia locale precedentemente clonata di Django in modalità di modifica</span></a> e creare un nuovo progetto Django al di fuori della tua copia locale di Django. Vedrai immediatamente tutti i cambiamenti che farai a Django nel tuo nuovo progetto, il che sarà di grande aiuto quando scriverai la tua prima patch.</p>\n</section>\n</section>\n<section id=\"running-django-s-test-suite-for-the-first-time\">\n<h2>Eseguire la suite di test di Django per la prima volta<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-first-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Quando contribuisci a Django, è molto importante che i cambiamenti che apporti al codice non introducano bug in altre aree di Django. Un modo di controllare che Django funzioni ancora dopo aver apportato i cambiamenti è quello di lanciare la suite di test di Django. Se tutti i test hanno successo, allora puoi essere ragionevolmente sicuro che i tuoi cambiamenti funzionino e che non hai pregiudicato la funzionalità di altre parti di Django. Se non hai mai lanciato la suite di test di Django, è una buona idea lanciarla prima per cominciare ad avere familiarità con i suoi output.</p>\n<p>Before running the test suite, enter the Django <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> directory using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span> <span class=\"pre\">tests</span></code> command, and install test dependencies by running:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-r<span class=\"w\"> </span>requirements/py3.txt\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -r requirements\\py3.txt\n</code></pre></div></div></div>\n<p>Se incontri un errore durante l’installazione, al tuo sistema potrebbe mancare una dipendenza per uno o più package Python. Consulta la documentazione del package per il quale si verifica l’errore o cerca nel web il messaggio di errore che ti si è presentato.</p>\n<p>Ora siamo pronti per far partire la nostra suite di test. Se stai usando GNU/Linux, macOS, o altre variazioni di Unix, esegui:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>Adesso siedi e rilassati. L’intera suite di test di Django si compone di centinaia di test e ci vorrà qualche minuto perchè giri, dipendentemente dalla velocità del tuo computer.</p>\n<p>Mentre la suite di test di Django è in esecuzione, vedrai scorrere lettere rappresentanti lo stato di ogni test man mano che viene completato. «E» indica che un errore è stato trovato, e «F» indica che le asserzioni del test sono fallite. Entrambi i casi sono considerati come fallimenti. Nel mentre, «x» e «s» hanno indicato probabili fallimenti e test omessi. I punti indicano i test passati.</p>\n<p>Quando i test vengono saltati, questo accade a causa di librerie mancanti necessarie per eseguire il test; guarda <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/unit-tests/#running-unit-tests-dependencies\"><span class=\"std std-ref\">Running all the tests</span></a> per la lista delle dipendenze e assicurati di installare quelle relative ai test delle modifiche che stai facendo (non ne avremo bisogno in questa guida). Alcuni test sono per specifiche banche dati e verranno saltati se non state utilizzando quelle relative ad essi. SQLite è la banca dati di default. Per eseguire i test usandone una differente, guarda <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">Using another settings module</span></a>.</p>\n<p>Una volta che il test è terminato, dovresti venir salutato con un messaggio che ti informa se la suite di test ha avuto successo o ha fallito. Poichè non hai ancora fatto modifiche al codice Django, l’intera suite di test <strong>dovrebbe</strong> aver successo. Se invece fallisce o dà errore assicurati di aver seguito tutti i passaggi precedenti correttamente. Guarda <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/unit-tests/#running-unit-tests\"><span class=\"std std-ref\">Running the unit tests</span></a> per ulteriori informazioni.</p>\n<p>Considera che l’ultima versione del ramo «main» potrebbe non essere sempre stabile. Quando sviluppi basandoti su «main», puoi controllare  <a href=\"#id11\"><span class=\"problematic\" id=\"id14\">`Django's continuous integration builds`__</span></a> per determinare se i fallimenti sono relativi alla tua macchina o sono presenti nella build ufficiale di Django. Se controlli una build specifica, puoi vedere la  sezione «Configuration Matrix» che mostra i fallimenti dovuti alla versione di Python e al database utilizzato.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Per questa guida e il ticket su cui stiamo lavorando, testare con SQLite è sufficiente, comunque, è possibile (e a volte necessario) :ref:”eseguire i tests usando una banca dati differente.</p>\n</aside>\n</section>\n<section id=\"working-on-a-feature\">\n<h2>Lavorare su una funzionalità<a class=\"heading-anchor\" href=\"#working-on-a-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Per questa guida, lavoreremo su un «ticket falso» come caso di studio. Queste sono le ipotesi:</p>\n<aside class=\"admonition-ticket-99999-allow-making-toast admonition\">\n<p class=\"admonition-title\">Ticket #99999 – Permette di fare un toast</p>\n<p>Django dovrebbe avere a disposizione una funzione «django.shortcuts.make_toast()» che ritorna «toast».</p>\n</aside>\n<p>Aggiungeremo ora questa funzionalità e i test associati.</p>\n</section>\n<section id=\"creating-a-branch-for-your-patch\">\n<h2>Creare una branch per la tua patch<a class=\"heading-anchor\" href=\"#creating-a-branch-for-your-patch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Prima di fare qualsiasi modifica, crea una nuova branch per il ticket:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>checkout<span class=\"w\"> </span>-b<span class=\"w\"> </span>ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git checkout -b ticket_99999\n</code></pre></div></div></div>\n<p>Puoi scegliere qualunque nome che desideri per il ramo, «ticket_99999» è un esempio. Tutte le modifiche fatte su questo ramo saranno specifiche per il ticket e non andranno a modificare la copia principale del codice che abbiamo clonato in precedenza.</p>\n</section>\n<section id=\"writing-some-tests-for-your-ticket\">\n<h2>Scrivere alcuni test per il tuo ticket<a class=\"heading-anchor\" href=\"#writing-some-tests-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nella maggior parte dei casi, affinchè una patch venga accettata in Django deve includere dei test. Per patch di correzione bug, questo significa che è necessario scrivere un test di regressione per assicurarsi che il bug non verrà mai reintrodotto in Django in futuro. Un test di regressione dovrebbe essere scritto in modo da fallire fintanto che il bug esiste ancora, e aver successo quando il bug invece è stato corretto. Per patch contenenti nuove funzionalità, avrai bisogno di includere test che assicurano che le nuove funzionalità stanno funzionando correttamente. Dovrebbero fallire se le nuove funzionalità non sono presenti, e aver successo quando invece sono implementate.</p>\n<p>Un buon modo per farlo è quello di scrivere i nuovi test all’inizio, prima di fare modifiche al codice. Questo stile di sviluppo è chiamato “test-driven development’__ e può essere applicato su interi progetti o singole patch. Dopo aver scritto i test, puoi eseguirli per verificare che effettivamente falliscono (poichè non hai corretto il bug o non hai ancora aggiunto quella funzionalità). Se i tuoi nuovi test non falliscono, devi correggerli affinchè lo facciano. Dopotutto, un test di regressione che passa indipendentemente dal fatto che un bug sia presente o no non è molto utile nel prevenire che esso possa ricomparire in futuro.</p>\n<p>Ora vediamo il nostro esempio.</p>\n<section id=\"writing-a-test-for-ticket-99999\">\n<h3>Scrivere un test per il ticket #99999<a class=\"heading-anchor\" href=\"#writing-a-test-for-ticket-99999\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Per risolvere questo ticket, aggiungeremo una funzione <code class=\"docutils literal notranslate\"><span class=\"pre\">make_toast()</span></code> al modulo <code class=\"docutils literal notranslate\"><span class=\"pre\">django.shortcuts</span></code>. Prima, scriveremo un test che usa la funzione e controlla che il suo output sia corretto.</p>\n<p>Naviga fino alla cartella di Django «tests/shortcuts/» e crea un nuovo file «test_make_toast.py». Aggiungi il seguente codice:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">make_toast</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MakeToastTests</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_make_toast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">make_toast</span><span class=\"p\">(),</span> <span class=\"s1\">&#39;toast&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Questo test controlla che «make_toast()» ritorna «toast».</p>\n<aside class=\"admonition-but-this-testing-thing-looks-kinda-hard admonition\">\n<p class=\"admonition-title\">Ma questa cosa del testing sembra una cosa difficile…</p>\n<p>Se non hai mai avuto a che fare con i test prima d’ora, potranno sembrarti un po” difficili da scrivere a prima vista. Per fortuna, fare i test è davvero un <em>grande</em> argomento nella programmazione, quindi ci sono molte informazioni:</p>\n<ul class=\"simple\">\n<li><p>Per iniziare a scrivere test per Django, un buon primo passo è leggere i documenti in <a class=\"reference internal\" href=\"/it/4.1/topics/testing/overview/\"><span class=\"doc\">Writing and running tests</span></a>.</p></li>\n<li><p>Buttati Into Python ( un libro online gratuito per i principianti sviluppatori di Python ) include alcuni ottimi progetti come <a href=\"#id11\"><span class=\"problematic\" id=\"id15\">`introduction to Unit Testing`__</span></a>.</p></li>\n<li><p>Dopo aver letto queste cose, se vuoi qualcosa di più succulento per i tuoi denti, c’è sempre la documentazione Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#module-unittest\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">unittest</span></code></a></p></li>\n</ul>\n</aside>\n</section>\n<section id=\"running-your-new-test\">\n<h3>Eseguire il tuo nuovo test<a class=\"heading-anchor\" href=\"#running-your-new-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Poichè non abbiamo fatto ancora alcuna modifica a «django.shortcuts», il nostro test dovrebbe fallire. Eseguiamo tutti i test nella cartella «shortcuts» per assicurarci che è proprio ciò che sta accadendo. «cd» nella cartella di Django «tests/» ed esegui:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>Se il test viene eseguito correttamente, dovresti vedere un fallimento corrispondente al metodo del test che abbiamo aggiunto, con questo errore:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"ne\">ImportError</span><span class=\"p\">:</span> <span class=\"n\">cannot</span> <span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">name</span> <span class=\"s1\">&#39;make_toast&#39;</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"s1\">&#39;django.shortcuts&#39;</span>\n</code></pre></div>\n<p>Se tutti i test vengono superati, assicurati di aggiungere il test mostrato in precedenza nella cartella e con il nome file appropriati.</p>\n</section>\n</section>\n<section id=\"writing-the-code-for-your-ticket\">\n<h2>Scrivere il codice per il tuo ticket<a class=\"heading-anchor\" href=\"#writing-the-code-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Successivamente aggiungeremo la funzione <code class=\"docutils literal notranslate\"><span class=\"pre\">make_toast()</span></code>.</p>\n<p>Vai alla cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">django/</span></code> ed apri il file <code class=\"docutils literal notranslate\"><span class=\"pre\">shortcuts.py</span></code>. Alla fine, aggiungi:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">make_toast</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"s1\">&#39;toast&#39;</span>\n</code></pre></div>\n<p>Ora dobbiamo assicurarci che il test che abbiamo scritto in precedenza venga superato, quindi possiamo vedere se il codice che abbiamo scritto funziona correttamente. Ancora una volta, posizionati nella cartella Django <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> ed esegui:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>Tutto dovrebbe funzionare. In caso contrario, assicurati di aver aggiunto la funzione al file corretto.</p>\n</section>\n<section id=\"running-django-s-test-suite-for-the-second-time\">\n<h2>Eseguire la suite di test di Django per la seconda volta<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-second-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Once you’ve verified that your patch and your test are working correctly, it’s a good idea to run the entire Django test suite to verify that your change hasn’t introduced any bugs into other areas of Django. While successfully passing the entire test suite doesn’t guarantee your code is bug free, it does help identify many bugs and regressions that might otherwise go unnoticed.</p>\n<p>Per eseguire l’intera suite test di Django, a riga di commando esegui``cd`` nella cartella <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> di Django ed esegui:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n</section>\n<section id=\"writing-documentation\">\n<h2>Scrivere la Documentazione<a class=\"heading-anchor\" href=\"#writing-documentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Questa è una nuova funzionalità, per cui dovrebbe essere documentata. Apri il file «docs/topics/http/shortcuts.txt» e aggiungi ciò che segue alla fine del file:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>``make_toast()``\n================\n\n.. function:: make_toast()\n\n.. versionadded:: 2.2\n\nReturns ``&#39;toast&#39;``.\n</code></pre></div>\n<p>Poichè questa nuova funzionalità sarà in un imminente rilascio viene anche aggiunta alle note di rilascio per la prossima versione di Django. Apri le note di rilascio per l’ultima versione in «docs/releases/», che mentre sto scrivendo è «2.2.txt». Aggiungi una nota sotto l’intestazione «Minor Features»:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>:mod:`django.shortcuts`\n~~~~~~~~~~~~~~~~~~~~~~~\n\n* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.\n</code></pre></div>\n<p>Per avere ulteriori informazione riguardo la scrittura della documentazione, includendo una spiegazione di cosa sia versionadded, controlla <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-documentation/\"><span class=\"doc\">Writing documentation</span></a>. Quella pagina include una spiegazione di come creare una copia della documentazione in locale, in modo da poter avere un’anteprima dell’HTML che verrà generato.</p>\n</section>\n<section id=\"previewing-your-changes\">\n<h2>Visualizzare l’anteprima delle tue modifiche<a class=\"heading-anchor\" href=\"#previewing-your-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ora è il momento di esaminare tutte le modifiche apportate nell’aggiornamento.\nPer preparare tutte le modifiche pronte per il commit, lancia:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>add<span class=\"w\"> </span>--all\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git add --all\n</code></pre></div></div></div>\n<p>Mostra le differenze tra la tua copia attuale di Django ( con le tue modifiche ) e la revisione di quello che avevi scaricato seguendo la guida.</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>diff<span class=\"w\"> </span>--cached\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git diff --cached\n</code></pre></div></div></div>\n<p>Usa le freccettine per muoverti su e giu.</p>\n<div class=\"code-block\" data-language=\"diff\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Diff</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Diff code\"><code><span class=\"gh\">diff --git a/django/shortcuts.py b/django/shortcuts.py</span>\n<span class=\"gh\">index 7ab1df0e9d..8dde9e28d9 100644</span>\n<span class=\"gd\">--- a/django/shortcuts.py</span>\n<span class=\"gi\">+++ b/django/shortcuts.py</span>\n<span class=\"gu\">@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):</span>\n\n<span class=\"w\"> </span>    # Finally, fall back and assume it&#39;s a URL\n<span class=\"w\"> </span>    return to\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+def make_toast():</span>\n<span class=\"gi\">+    return &#39;toast&#39;</span>\n<span class=\"gh\">diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt</span>\n<span class=\"gh\">index 7d85d30c4a..81518187b3 100644</span>\n<span class=\"gd\">--- a/docs/releases/2.2.txt</span>\n<span class=\"gi\">+++ b/docs/releases/2.2.txt</span>\n<span class=\"gu\">@@ -40,6 +40,11 @@ database constraints. Constraints are added to models using the</span>\n<span class=\"w\"> </span>Minor features\n<span class=\"w\"> </span>--------------\n\n<span class=\"gi\">+:mod:`django.shortcuts`</span>\n<span class=\"gi\">+~~~~~~~~~~~~~~~~~~~~~~~</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.</span>\n<span class=\"gi\">+</span>\n<span class=\"w\"> </span>:mod:`django.contrib.admin`\n<span class=\"w\"> </span>~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<span class=\"gh\">diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gh\">index 7b3a3a2c00..711bf6bb6d 100644</span>\n<span class=\"gd\">--- a/docs/topics/http/shortcuts.txt</span>\n<span class=\"gi\">+++ b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gu\">@@ -271,3 +271,12 @@ This example is equivalent to::</span>\n<span class=\"w\"> </span>        my_objects = list(MyModel.objects.filter(published=True))\n<span class=\"w\"> </span>        if not my_objects:\n<span class=\"w\"> </span>            raise Http404(&quot;No MyModel matches the given query.&quot;)\n<span class=\"gi\">+</span>\n<span class=\"gi\">+``make_toast()``</span>\n<span class=\"gi\">+================</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. function:: make_toast()</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. versionadded:: 2.2</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+Returns ``&#39;toast&#39;``.</span>\n<span class=\"gh\">diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py</span>\nnew file mode 100644\n<span class=\"gh\">index 0000000000..6f4c627b6e</span>\n<span class=\"gd\">--- /dev/null</span>\n<span class=\"gi\">+++ b/tests/shortcuts/test_make_toast.py</span>\n<span class=\"gu\">@@ -0,0 +1,7 @@</span>\n<span class=\"gi\">+from django.shortcuts import make_toast</span>\n<span class=\"gi\">+from django.test import SimpleTestCase</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+class MakeToastTests(SimpleTestCase):</span>\n<span class=\"gi\">+    def test_make_toast(self):</span>\n<span class=\"gi\">+        self.assertEqual(make_toast(), &#39;toast&#39;)</span>\n</code></pre></div>\n<p>Quando hai finito di controllare l’anteprima della tua patch, clicca il tasto  <code class=\"docutils literal notranslate\"><span class=\"pre\">q</span></code> per ritornare alla linea di comando. Se il contenuto della patch sembra giusto, è” il momento di committare i cambiamenti.</p>\n</section>\n<section id=\"committing-the-changes-in-the-patch\">\n<h2>Salvare le modifiche nella patch<a class=\"heading-anchor\" href=\"#committing-the-changes-in-the-patch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Per confermare le modifiche:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>commit\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git commit\n</code></pre></div></div></div>\n<p>Questo apre l’editor di test per inserire il messaggio di commit. Segui le linee guida del :ref:”messaggio di commit&lt;committing-guidelines&gt;” e scrivi un messaggio tipo:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>Fixed #99999 -- Added a shortcut function to make toast.\n</code></pre></div>\n</section>\n<section id=\"pushing-the-commit-and-making-a-pull-request\">\n<h2>Inviare il commit e creare una pull request<a class=\"heading-anchor\" href=\"#pushing-the-commit-and-making-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Dopo aver committato la patch, invia il tuo fork su GitHub ( sostituendo «ticket_99999» con il nome del tuo branch, se è diverso):</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>push<span class=\"w\"> </span>origin<span class=\"w\"> </span>ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git push origin ticket_99999\n</code></pre></div></div></div>\n<p>Puoi creare una pull request vistando la <a class=\"reference external\" href=\"https://github.com/django/django/\">Django GitHub page</a>. Vedrai il tuo branch nella sezione «Your recently pushed branches». Clicca «Compare &amp; pull request» di fianco.</p>\n<p>Per favore non farlo per questa guida ma sulla prossima pagina che mostra un’anteprima della patch, cliccheresti «Crea richiesta pull».</p>\n</section>\n<section id=\"next-steps\">\n<h2>Prossimi passi<a class=\"heading-anchor\" href=\"#next-steps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Congratulazioni, hai imparato a fare una richiesta pull a Django! Dettagli su tecniche più avanzate di cui potresti aver bisogno sono in <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/working-with-git/\"><span class=\"doc\">Working with Git and GitHub</span></a>.</p>\n<p>Ora puoi utilizzare queste conoscenze aiutando a migliorare il codice di Django.</p>\n<section id=\"more-information-for-new-contributors\">\n<h3>Maggiori informazioni per nuovi contributori<a class=\"heading-anchor\" href=\"#more-information-for-new-contributors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Prima che anche tu inizi a scrivere patch per Django, ci sono altre informazioni a cui dovresti prima dare un’occhio:</p>\n<ul class=\"simple\">\n<li><p>Dovresti assicurarti di leggere la documentazione Django su :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>rivendicare tickets and sottomettere patch&lt;/internals/contributing/writing-code/submitting-patches&gt;”. Riguarda l’etichetta Trac, come rivendicare ticket per te stesso, stile di coding per le patch, e molti altri dettagli importanti.</p></li>\n<li><p>Chi vuole contribuire per la prima volta dovrebbe anche leggere la :doc:”documentazione per i nuovi contributori&lt;/internals/contributing/new-contributors/&gt;” di Django. E” piena di buoni consigli per quelli di noi che sono nuovi nell’aiutare con Django.</p></li>\n<li><p>Dopo questi, se sei ancora in cerca di altre informazioni sul contribuire, puoi sempre cercare nel resto della :doc:”documentazione di Django sul contribuire&lt;/internals/contributing/index&gt;”. Contiene molte informazioni utili e dovrebbe essere la tua prima fonte di informazione per rispondere alle domande che potresti avere.</p></li>\n</ul>\n</section>\n<section id=\"finding-your-first-real-ticket\">\n<h3>Cercare il tuo primo vero ticket<a class=\"heading-anchor\" href=\"#finding-your-first-real-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dopo che avrai letto la documentazione riportata sopra, sarai pronto per andare a cercare un ticket per cui scrivere una patch. Presta particolare attenzione ai ticket indicati con il flag «easy pickings». Questi ticket di solito sono di semplice risoluzione e sono perfetti per i tuoi primi contributi. Quando avrai acquisito familiarità con le procedure per contribuire a Django, potrai passare a scrivere patch per ticket più complicati.</p>\n<p>Se non vedi l’ora di cominciare (e nessuno si lamenterà per questo!), prova a dare un’occhiata alla lista dei <a href=\"#id11\"><span class=\"problematic\" id=\"id16\">`ticket facili che hanno bisogno di una patch`__</span></a> e dei <a href=\"#id11\"><span class=\"problematic\" id=\"id17\">`ticket facili che hanno una patch da migliorare`__</span></a>. Se hai familiarità nella scrittura di test automatici, puoi anche dare un’occhiata alla lista dei <a href=\"#id11\"><span class=\"problematic\" id=\"id18\">`ticket facili che hanno bisogno di test`__</span></a>. Ricorda di seguire le linee guida su come diventare l’assegnatario di un ticket che sono menzionate nel link alla documentazione di Django su <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">reclamare i ticket e inviare patch</span></a>.</p>\n</section>\n<section id=\"what-s-next-after-creating-a-pull-request\">\n<h3>Cosa fare dopo aver creato una pull request?<a class=\"heading-anchor\" href=\"#what-s-next-after-creating-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dopo che un ticket ottiene una patch, necessita di una revisione da parte di un altro paio di occhi. Dopo aver inviato una pull request, aggiorna i metadati del ticket impostando il flag in modo che indichi «has patch», «doesn’t need tests» ecc…, così che altri possano trovarlo e rivederlo. Contribuire non vuol dire sempre scrivere una patch da zero. Rivedere le patch esistenti è un tipo di contributo altresì utile. Vedi <a class=\"reference internal\" href=\"/it/4.1/internals/contributing/triaging-tickets/\"><span class=\"doc\">Triaging tickets</span></a> per ulteriori dettagli.</p>\n</section>\n</section>","rootId":"writing-your-first-patch-for-django","toc":[{"title":"Introduzione","anchor":"introduction","children":[{"title":"Per chi è questo tutorial?","anchor":"who-s-this-tutorial-for","children":[]},{"title":"Di che parla questo tutorial?","anchor":"what-does-this-tutorial-cover","children":[]}]},{"title":"Codice di Condotta","anchor":"code-of-conduct","children":[]},{"title":"Installazione di Git","anchor":"installing-git","children":[]},{"title":"Ottenere una copia della versione di sviluppo di Django","anchor":"getting-a-copy-of-django-s-development-version","children":[{"title":"Creazione di progetti con una copia locale di Django","anchor":"creating-projects-with-a-local-copy-of-django","children":[]}]},{"title":"Eseguire la suite di test di Django per la prima volta","anchor":"running-django-s-test-suite-for-the-first-time","children":[]},{"title":"Lavorare su una funzionalità","anchor":"working-on-a-feature","children":[]},{"title":"Creare una branch per la tua patch","anchor":"creating-a-branch-for-your-patch","children":[]},{"title":"Scrivere alcuni test per il tuo ticket","anchor":"writing-some-tests-for-your-ticket","children":[{"title":"Scrivere un test per il ticket #99999","anchor":"writing-a-test-for-ticket-99999","children":[]},{"title":"Eseguire il tuo nuovo test","anchor":"running-your-new-test","children":[]}]},{"title":"Scrivere il codice per il tuo ticket","anchor":"writing-the-code-for-your-ticket","children":[]},{"title":"Eseguire la suite di test di Django per la seconda volta","anchor":"running-django-s-test-suite-for-the-second-time","children":[]},{"title":"Scrivere la Documentazione","anchor":"writing-documentation","children":[]},{"title":"Visualizzare l’anteprima delle tue modifiche","anchor":"previewing-your-changes","children":[]},{"title":"Salvare le modifiche nella patch","anchor":"committing-the-changes-in-the-patch","children":[]},{"title":"Inviare il commit e creare una pull request","anchor":"pushing-the-commit-and-making-a-pull-request","children":[]},{"title":"Prossimi passi","anchor":"next-steps","children":[{"title":"Maggiori informazioni per nuovi contributori","anchor":"more-information-for-new-contributors","children":[]},{"title":"Cercare il tuo primo vero ticket","anchor":"finding-your-first-real-ticket","children":[]},{"title":"Cosa fare dopo aver creato una pull request?","anchor":"what-s-next-after-creating-a-pull-request","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Come iniziare","url":"/it/4.1/intro/"}],"prev":{"docname":"intro/whatsnext","title":"Cosa leggere dopo","url":"/it/4.1/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Using Django","url":"/it/4.1/topics/"},"formats":{"html":"/it/4.1/intro/contributing/","markdown":"/it/4.1/intro/contributing.md","json":"/it/4.1/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/it/4.1/intro/contributing/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}