Γράφοντας το πρώτο σας patch για το Django¶
Εισαγωγή¶
Ενδιαφέρεστε να συνεισφέρετε στην κοινότητα; Ίσως έχετε βρει κάποιο σφάλμα προγράμματος (bug) στο Django και θέλετε να διορθωθεί ή θέλετε να προσθέσετε κάποια επιπλέον λειτουργία ή χαρακτηριστικό.
Ο καλύτερος τρόπος να δείτε τις δικές σας προτάσεις-ιδέες να γίνονται πραγματικότητα είναι συνεισφέροντας στο Django. Αυτό στην αρχή ίσως σας φανεί περίπλοκο αλλά στην πραγματικότητα είναι αρκετά απλό. Θα σας καθοδηγήσουμε βήμα-βήμα μέσα σε όλη την διαδικασία ώστε να μπορέσετε να μάθετε μέσα από ένα παράδειγμα.
Σε ποιους απευθύνεται αυτό το tutorial¶
Δείτε επίσης
Αν ψάχνετε κάποια αναφορά σχετικά με το πως να υποβάλετε patches, δείτε το έγγραφο Submitting patches.
Για αυτόν τον οδηγό (tutorial), θα πρέπει να γνωρίζετε τουλάχιστον τη βασική λειτουργία του Django. Αυτό σημαίνει ότι θα πρέπει να είστε εξοικειωμένοι με τους ήδη υπάρχοντες οδηγούς Γράφοντας το πρώτο σας Django app. Επίσης, θα πρέπει να γνωρίζετε αρκετά καλά τη γλώσσα προγραμματισμού Python. Αν πάλι όχι, το βιβλίο Dive Into Python είναι ένα εκπληκτικό (και δωρεάν) online βιβλίο για νέους προγραμματιστές στη γλώσσα Python.
Για όσους από εσάς δεν είστε εξοικειωμένοι με τα εργαλεία συστημάτων ελέγχου εκδόσεων (VCS – version control system) και το Trac, δεν υπάρχει λόγος να ανησυχείτε. Αυτός ο οδηγός (και όποιοι σύνδεσμοι-links του) έχει τις απαραίτητες πληροφορίες για να ξεκινήσετε. Ωστόσο, ίσως να θέλετε να μάθετε περισσότερα σχετικά με αυτά τα εργαλεία, αν σκοπεύετε να συνεισφέρετε στο Django τακτικά.
Εν τούτοις, αυτός ο οδηγός στο μεγαλύτερο του μέρος, προσπαθεί να εξηγήσει όσα περισσότερα μπορεί, ώστε να μπορεί να φανεί χρήσιμος στο μεγαλύτερο δυνατό ευρύ κοινό.
Που να ψάξετε για βοήθεια
Αν δυσκολεύεστε με αυτόν τον οδηγό, μπορείτε να στείλετε ένα μήνυμα στους django-developers ή να συμμετάσχετε στο κανάλι #django-dev στο irc.freenode.net για να μιλήσετε με άλλους Django χρήστες οι οποίοι μπορεί να σας βοηθήσουν.
Τι καλύπτει αυτός ο οδηγός;¶
Σε αυτόν τον οδηγό θα φτιάξουμε παρέα ένα patch για το Django και θα το συνεισφέρουμε (contribute) στην κοινότητα για πρώτη φορά. Στο τέλος αυτού του οδηγού, θα έχετε λάβει τις βασικές γνώσεις των εργαλείων (tools) και των διαδικασιών (processes) που εμπλέκονται. Πιο συγκεκριμένα, θα καλύψουμε τα ακόλουθα:
- Εγκατάσταση Git.
- Downloading a copy of Django’s development version.
- Εκτέλεση της σουίτας δοκιμών του Django (test suite).
- Γράφοντας τεστ για το patch.
- Γράφοντας κώδικα για το ίδιο το patch.
- Πραγματοποίηση τεστ για το patch.
- Υποβολή αιτήματος έλξης.
- Που να κοιτάξετε για περισσότερες πληροφορίες.
Αφού ολοκληρώσετε τον οδηγό, μπορείτε να διαβάσετε το :doc:` εγχειρίδιο (documentation) του Django σχετικά με την συνεισφορά </internals/contributing/index>`. Περιέχει πολλές πληροφορίες και αν θέλετε να συνεισφέρετε τακτικά στο Django θα πρέπει να το διαβάσετε. Αν έχετε απορίες, τότε πιθανόν το εγχειρίδιο να έχει την απάντηση.
Python 3!
The current version of Django doesn’t support Python 2.7. Get Python 3 at Python’s download page or with your operating system’s package manager.
Για τους χρήστες Windows
Κατά την εγκατάσταση της Python σε περιβάλλον Windows, σιγουρευτείτε ότι η επιλογή «Προσθήκη python.exe στο Path» είναι επιλεγμένη, ούτως ώστε οι εντολές που έχουν σχέση με την Python να είναι διαθέσιμες μέσω της γραμμής εντολών.
Κώδικας δεοντολογίας¶
Ως συνεισφέρων, μπορείτε να μας βοηθήσετε να διατηρήσουμε την Django κοινότητα ανοιχτή (open) και περιεκτική (inclusive). Παρακαλούμε διαβάστε και ακολουθήστε το δικό μας Κώδικα Δεοντολογίας.
Εγκατάσταση Git¶
Για αυτόν τον οδηγό θα χρειαστεί να έχετε εγκατεστημένο το Git ούτως ώστε να κατεβάσετε την αναπτυξιακή έκδοση (development version) του Django και να δημιουργήσετε patch αρχεία για τις αλλαγές που κάνετε.
Για να ελέγξετε αν έχετε εγκατεστημένο το Git, γράψτε στη κονσόλα (ή στη γραμμή εντολών αν έχετε Windows) τη λέξη git
. Αν βλέπετε μηνύματα που λένε ότι αυτή η εντολή δεν υπάρχει, θα χρειαστεί να κατεβάσετε το Git και να το εγκαταστήσετε. Δείτε πως, στην επίσημη σελίδα του Git.
Αν δεν είστε εξοικειωμένοι με το Git, μπορείτε να μάθετε περισσότερα σχετικά με τις εντολές του (αφού εγκατασταθεί) πληκτρολογώντας git help
στην κονσόλα (ή στη γραμμή εντολών για χρήστες Windows).
Δημιουργία αντίγραφου της αναπτυξιακής έκδοσης του Django¶
Το πρώτο βήμα για την συνεισφορά στο Django είναι να αποκτήσετε ένα αντίγραφο του πηγαίου κώδικα. Πρώτα, κάντε fork το Django από το GitHub. Από την γραμμή εντολών, χρησιμοποιείστε την εντολή cd
για να μεταβείτε στον φάκελο στον οποίο θέλετε να αποθηκεύσετε τον πηγαίο κώδικα του Django. Αν δεν υπάρχει κάποιος φάκελος της αρεσκείας σας, τότε χρησιμοποιήστε την εντολή mkdir
για να τον δημιουργήσετε και μετά την εντολή cd επιθυμητός_φάκελος
για να αποθηκεύσετε εκεί τον πηγαίο κώδικα.
Κατεβάστε το αποθετήριο (εφεξής repository ή repo) του πηγαίου κώδικα του Django χρησιμοποιώντας την ακόλουθη εντολή:
$ git clone git@github.com:YourGitHubName/django.git
...\> git clone git@github.com:YourGitHubName/django.git
Low bandwidth connection?
You can add the --depth 1
argument to git clone
to skip downloading
all of Django’s commit history, which reduces data transfer from ~250 MB
to ~70 MB.
Τώρα που έχετε ένα τοπικό αντίγραφο του Django, μπορείτε να το εγκαταστήσετε με το pip
, όπως θα εγκαθιστούσατε οποιοδήποτε άλλο πακέτο. ;Ένας καλός τρόπος είναι η δημιουργία virtual environment (απομονωμένο περιβάλλον εργασίας), που θα σας επιτρέψει να έχετε ένα χωριστό φάκελο με τα απαραίτητα πακέτα για κάθε πρότζεκτ σας.
It’s a good idea to keep all your virtual environments in one place, for
example in .virtualenvs/
in your home directory.
Create a new virtual environment by running:
$ python3 -m venv ~/.virtualenvs/djangodev
...\> py -m venv %HOMEPATH%\.virtualenvs\djangodev
Η διαδρομή (path) που εισαγάγατε αποτελεί και το καινούργιο virtualenv το οποίο θα αποθηκευτεί στον υπολογιστή σας.
The final step in setting up your virtual environment is to activate it:
$ source ~/.virtualenvs/djangodev/bin/activate
Αν η εντολή source
δεν είναι διαθέσιμη, χρησιμοποιήστε την τελεία, όπως:
$ . ~/.virtualenvs/djangodev/bin/activate
Για τους χρήστες Windows
To activate your virtual environment on Windows, run:
...\> %HOMEPATH%\.virtualenvs\djangodev\Scripts\activate.bat
You have to activate the virtual environment whenever you open a new terminal window. virtualenvwrapper is a useful tool for making this more convenient.
The name of the currently activated virtual environment is displayed on the
command line to help you keep track of which one you are using. Anything you
install through pip
while this name is displayed will be installed in that
virtual environment, isolated from other environments and system-wide packages.
Go ahead and install the previously cloned copy of Django:
$ pip install -e /path/to/your/local/clone/django/
...\> pip install -e \path\to\your\local\clone\django\
Η εγκατεστημένη έκδοση του Django είναι τώρα μέσα στο virtualenv σας και μπορείτε να κάνετε import django
σε Python κονσόλα χωρίς να σας επιστρέψει σφάλμα (cannot import module django). Τώρα μπορείτε να δείτε απ’ ευθείας τις αλλαγές που κάνετε σε αυτό το πακέτο, το οποίο είναι εξαιρετικά χρήσιμο, ειδικά όταν θα γράψετε το πρώτο σας patch αρχείο.
Εκτέλεση της σουίτας δοκιμών του Django για πρώτη φορά¶
When contributing to Django it’s very important that your code changes don’t introduce bugs into other areas of Django. One way to check that Django still works after you make your changes is by running Django’s test suite. If all the tests still pass, then you can be reasonably sure that your changes work and haven’t broken other parts Django. If you’ve never run Django’s test suite before, it’s a good idea to run it once beforehand to get familiar with its output.
Before running the test suite, install its dependencies by cd
-ing into the
Django tests/
directory and then running:
$ pip install -r requirements/py3.txt
...\> pip install -r requirements\py3.txt
Αν αντιμετωπίσατε κάποιο πρόβλημα κατά την εγκατάσταση, ίσως να λείπει απ” το σύστημα σας κάποιο dependency (τα dependencies είναι και αυτά με τη σειρά τους πακέτα) για ένα ή περισσότερα Python πακέτα. Συμβουλευτείτε το εγχειρίδιο των πακέτων που δεν εγκαταστάθηκαν ή αναζητήστε στο ίντερνετ το σφάλμα, όπως ακριβώς αυτό εμφανίστηκε όταν προέκυψε.
Now we are ready to run the test suite. If you’re using GNU/Linux, macOS, or some other flavor of Unix, run:
$ ./runtests.py
...\> runtests.py
Now sit back and relax. Django’s entire test suite has thousands of tests, and it takes at least a few minutes run, depending on the speed of your computer.
While Django’s test suite is running, you’ll see a stream of characters
representing the status of each test as it completes. E
indicates that an
error was raised during a test, and F
indicates that a test’s assertions
failed. Both of these are considered to be test failures. Meanwhile, x
and
s
indicated expected failures and skipped tests, respectively. Dots indicate
passing tests.
Τα παραλειπόμενα τεστ (τεστ που δεν έγιναν) προκύπτουν συνήθως λόγω έλλειψης κάποιων εξωτερικών βιβλιοθηκών (external libraries) οι οποίες χρειάζονται για να τρέξει το τεστ. Δείτε στο Running all the tests για μια λίστα με όλα τα dependencies (εξαρτώμενα πακέτα – εξωτερικές βιβλιοθήκες). Επίσης σιγουρευτείτε ότι έχετε εγκαταστήσει τα απαραίτητα πακέτα (στα οποία εξαρτώνται τα τεστ) προτού τρέξετε κάποιο τεστ (δεν θα χρειαστούμε κάποιο από αυτά σε αυτόν τον οδηγό). Μερικά τεστ είναι γραμμένα και συνδέονται με μια συγκεκριμένη βάση δεδομένων και δεν θα τρέξουν αν δεν υπάρχει εγκατεστημένη η αντίστοιχη βάση δεδομένων καθώς και το πακέτο (βιβλιοθήκη) που συνδέει την database με το Django (π.χ για την PostgreSQL το πακέτο είναι το psycopg2
). Η SQLite είναι η βάση δεδομένων που χρησιμοποιεί το Django ως προεπιλογή. Μπορείτε επίσης να Using another settings module.
Όταν ολοκληρωθούν τα τεστ, θα σας εμφανιστεί κάποιο μήνυμα που θα σας ενημερώνει για την επιτυχή ή όχι εκτέλεση τους. Εφόσον δεν έχετε κάνει κάποια αλλαγή μέχρι τώρα στον πηγαίο κώδικα του Django, όλα τα τεστ θα πρέπει να έχουν επιτυχή έκβαση. Αν δείτε τυχόν σφάλματα ή αποτυχίες κάποιων τεστ, σιγουρευτείτε ότι έχετε ακολουθήσει κατάλληλα τα ανωτέρω βήματα. Δείτε στο Running the unit tests για περισσότερες πληροφορίες. Αν χρησιμοποιείτε την Python 3.5+, θα υπάρξουν κάποιες αποτυχίες μερικών τεστ οι οποίες οφείλονται σε προειδοποιήσεις υποβάθμισης (deprecation warnings) στις οποίες μπορείτε να μην δώσετε σημασία. Αυτές οι αποτυχίες έχουν αποκατασταθεί στην τρέχουσα έκδοση του Django. Σας υπενθυμίζουμε ότι σε αυτόν τον οδηγό χρησιμοποιούμε μια παλιά έκδοση του Django.
Note that the latest Django master may not always be stable. When developing against master, you can check Django’s continuous integration builds to determine if the failures are specific to your machine or if they are also present in Django’s official builds. If you click to view a particular build, you can view the «Configuration Matrix» which shows failures broken down by Python version and database backend.
Σημείωση
Για το συγκεκριμένο οδηγό και για το ticket πάνω στο οποίο δουλεύουμε, τα τεστ που αφορούν την SQLite είναι αρκετά, ωστόσο, είναι δυνατόν (και μερικές φορές απαραίτητο) να τρέχουμε τεστ χρησιμοποιώντας διαφορετικές βάσεις δεδομένων.
Working on a feature¶
For this tutorial, we’ll work on a «fake ticket» as a case study. Here are the imaginary details:
Ticket #99999 – Allow making toast
Django should provide a function django.shortcuts.make_toast()
that
returns 'toast'
.
We’ll now implement this feature and associated tests.
Δημιουργία ενός τμήματος για το αρχείου σας¶
Πριν κάνετε αλλαγές, δημιουργήστε ένα νέο τμήμα για το εισητήριο
$ git checkout -b ticket_99999
...\> git checkout -b ticket_99999
You can choose any name that you want for the branch, «ticket_99999» is an example. All changes made in this branch will be specific to the ticket and won’t affect the main copy of the code that we cloned earlier.
Γράφοντας μερικά τεστ για το ticket¶
Στις περισσότερες περιπτώσεις, για να θεωρηθεί ένα patch αποδεκτό για την ενσωμάτωση του στο Django, θα πρέπει να περιέχει τεστ. Για περιπτώσεις που αφορούν κάποια επιδιόρθωση σφάλματος (bug fix), θα πρέπει να γραφτεί ένα τεστ οπισθοδρόμησης (regression test) του οποίου η σημασία είναι η βεβαίωση ότι το σφάλμα (που επρόκειτο να διορθωθεί) δεν θα ξαναεμφανιστεί σε μεταγενέστερη έκδοση του Django. Ένα regression τεστ θα πρέπει να γραφτεί με τέτοιο τρόπο ούτως ώστε θα αποτυγχάνει (fail) όσο το σφάλμα θα υπάρχει και θα επιτυγχάνει όταν το σφάλμα διορθωθεί. Για patches τα οποία περιέχουν καινούργιο κώδικα (δεν προσπαθούν, δηλαδή, να διορθώσουν υπάρχον κώδικα αλλά προσθέτουν νέα χαρακτηριστικά-λειτουργία), θα χρειαστεί να συμπεριλάβετε τεστ τα οποία εξασφαλίζουν ότι το καινούργιο χαρακτηριστικό λειτουργεί ορθά (π.χ δημιουργία ενός καινούργιου django.db.models.fields ή δημιουργία καινούργιου template tag). Τα τεστ αυτά, θα πρέπει να αποτυγχάνουν όταν τα καινούργια αυτά χαρακτηριστικά δεν υπάρχουν (π.χ σε παλαιότερες εκδόσεις του Django) και αντιθέτως να επιτυγχάνουν όταν αυτά (τα χαρακτηριστικά) εμφανιστούν.
Μια καλή πρακτική για να επιτύχετε τα παραπάνω είναι να γράψετε πρώτα τα τεστ, προτού κάνετε οποιεσδήποτε αλλαγές στον πηγαίο κώδικα. Αυτού του είδους το development ονομάζεται test-driven development και μπορεί να εφαρμοστεί από απλά patches μέχρι ολόκληρα projects. Αφού γράψετε τα τεστ, μπορείτε να τα τρέξετε για να διαπιστώσετε ότι όντως αποτυγχάνουν (λογικό, αφού δεν έχετε γράψει ακόμη κώδικα που να διορθώνει το σφάλμα ή κώδικα που προσθέτει κάποιο καινούργιο χαρακτηριστικό στο Django). Αν τα τεστ σας δεν αποτυγχάνουν, θα πρέπει να φροντίσετε ώστε να το κάνουν. Αν ένα regression test περνά, ανεξαρτήτως αν το σφάλμα (bug) υπάρχει ή όχι, δεν βοηθάει καθόλου και θα δυσκολέψει το έργο (όχι μόνο το δικό σας) της αποσφαλμάτωσης (debugging) στο μέλλον.
Ας εργαστούμε λοιπόν στο παράδειγμα μας.
Writing a test for ticket #99999¶
In order to resolve this ticket, we’ll add a make_toast()
function to the
top-level django
module. First we are going to write a test that tries to
use the function and check that its output looks correct.
Navigate to Django’s tests/shortcuts/
folder and create a new file
test_make_toast.py
. Add the following code:
from django.shortcuts import make_toast
from django.test import SimpleTestCase
class MakeToastTests(SimpleTestCase):
def test_make_toast(self):
self.assertEqual(make_toast(), 'toast')
This test checks that the make_toast()
returns 'toast'
.
Μήπως σας φάνηκε δύσκολο αυτό το τεστ;
Αν δεν έχετε γράψει ποτέ στο παρελθόν κάποιο τεστ και πρώτη φορά συναναστρέφεστε με αυτό, στην αρχή ίσως σας φανεί κάπως δύσκολο. Δεν υπάρχει όμως λόγος να ανησυχείτε καθώς η ενότητα testing είναι ένα τεράστιο κεφάλαιο στον προγραμματισμό, που σημαίνει ότι υπάρχει εκτενής και πολλή πληροφορία πάνω σε αυτό το θέμα:
- Μια πρώτη ματιά για τη σύνταξη των τεστ για το Django μπορείτε να βρείτε στην ενότητα του εγχειριδίου (documentation) Writing and running tests.
- Το βιβλίο Dive Into Python (δωρεάν για αρχάριους developers στην γλώσσα προγραμματισμού Python) περιέχει μια πολύ καλή εισαγωγή στο Unit Testing.
- Αφού διαβάσετε τα ανωτέρω και επιθυμείτε να εμβαθύνετε τις γνώσεις σας περί του θέματος, υπάρχει πάντα το εγχειρίδιο
unittest
της Python.
Τρέχοντας το τεστ¶
Since we haven’t made any modifications to django.shortcuts
yet, our test
should fail. Let’s run all the tests in the shortcuts
folder to make sure
that’s really what happens. cd
to the Django tests/
directory and run:
$ ./runtests.py shortcuts
...\> runtests.py shortcuts
If the tests ran correctly, you should see one failure corresponding to the test method we added, with this error:
ImportError: cannot import name 'make_toast' from 'django.shortcuts'
If all of the tests passed, then you’ll want to make sure that you added the new test shown above to the appropriate folder and file name.
Γράφοντας κώδικα για το ticket¶
Next we’ll be adding the make_toast()
function.
Navigate to the django/
folder and open the shortcuts.py
file. At the
bottom, add:
def make_toast():
return 'toast'
Now we need to make sure that the test we wrote earlier passes, so we can see
whether the code we added is working correctly. Again, navigate to the Django
tests/
directory and run:
$ ./runtests.py shortcuts
...\> runtests.py shortcuts
Everything should pass. If it doesn’t, make sure you correctly added the function to the correct file.
Εκτέλεση της σουίτας δοκιμών του Django για δεύτερη φορά¶
Όταν έχετε επιβεβαιώσει ότι το patch και το τεστ δουλεύουν ορθά, τότε είναι ώρα για ένα τελευταίο τεστ όλης της σουίτας του Django, ούτως ώστε να είστε σίγουροι ότι οι αλλαγές που κάνατε (στο συγκεκριμένο οδηγό, στην BaseForm
) δεν επιφέρουν σφάλματα σε άλλα σημεία του Django. Ωστόσο, αν το patch περάσει επιτυχώς απ’ όλα τα τεστ, αυτό δεν εγγυάται ότι ο κώδικας σας δεν περιέχει σφάλματα (bug free). Βοηθάει, όμως, στην αναγνώριση πολλών σφαλμάτων που ειδάλλως θα περνούσαν απαρατήρητα.
Για να τρέξετε ολόκληρη τη σουίτα δοκιμών του Django, πληκτρολογήστε cd tests/
και τρέξτε:
$ ./runtests.py
...\> runtests.py
Γράφοντας το εγχειρίδιο (documentation)¶
This is a new feature, so it should be documented. Open the file
docs/topics/http/shortcuts.txt
and add the following at the end of the
file:
``make_toast()``
================
.. versionadded:: 2.2
Returns ``'toast'``.
Since this new feature will be in an upcoming release it is also added to the
release notes for the next version of Django. Open the release notes for the
latest version in docs/releases/
, which at time of writing is 2.2.txt
.
Add a note under the «Minor Features» header:
:mod:`django.shortcuts`
~~~~~~~~~~~~~~~~~~~~~~~
* The new :func:`django.shortcuts.make_toast` function returns ``'toast'``.
Για περισσότερες πληροφορίες σχετικά με οδηγίες σύνταξης του εγχειριδίου (περιέχει και την εξήγηση του versionadded
), δείτε στο Writing documentation. Αυτή η σελίδα εξηγεί και το πως να δημιουργήσετε ένα αντίγραφο του εγχειριδίου σας τοπικά (στον υπολογιστή σας), ούτως ώστε να δείτε πως θα φαίνεται online στο επίσημο site του Django.
Προβολή των αλλαγών σας¶
Now it’s time to go through all the changes made in our patch. To stage all the changes ready for commit, run:
$ git add --all
...\> git add --all
Then display the differences between your current copy of Django (with your changes) and the revision that you initially checked out earlier in the tutorial with:
$ git diff --cached
...\> git diff --cached
Χρησιμοποιήστε τα βέλη για να κινηθείτε προς τα επάνω και προς τα κάτω.
diff --git a/django/shortcuts.py b/django/shortcuts.py
index 7ab1df0e9d..8dde9e28d9 100644
--- a/django/shortcuts.py
+++ b/django/shortcuts.py
@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):
# Finally, fall back and assume it's a URL
return to
+
+
+def make_toast():
+ return 'toast'
diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt
index 7d85d30c4a..81518187b3 100644
--- a/docs/releases/2.2.txt
+++ b/docs/releases/2.2.txt
@@ -40,6 +40,11 @@ database constraints. Constraints are added to models using the
Minor features
--------------
+:mod:`django.shortcuts`
+~~~~~~~~~~~~~~~~~~~~~~~
+
+* The new :func:`django.shortcuts.make_toast` function returns ``'toast'``.
+
:mod:`django.contrib.admin`
~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt
index 7b3a3a2c00..711bf6bb6d 100644
--- a/docs/topics/http/shortcuts.txt
+++ b/docs/topics/http/shortcuts.txt
@@ -271,3 +271,12 @@ This example is equivalent to::
my_objects = list(MyModel.objects.filter(published=True))
if not my_objects:
raise Http404("No MyModel matches the given query.")
+
+``make_toast()``
+================
+
+.. function:: make_toast()
+
+.. versionadded:: 2.2
+
+Returns ``'toast'``.
diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py
new file mode 100644
index 0000000000..6f4c627b6e
--- /dev/null
+++ b/tests/shortcuts/test_make_toast.py
@@ -0,0 +1,7 @@
+from django.shortcuts import make_toast
+from django.test import SimpleTestCase
+
+
+class MakeToastTests(SimpleTestCase):
+ def test_make_toast(self):
+ self.assertEqual(make_toast(), 'toast')
Αφότου ρίξετε μια ματιά στο κείμενο, πιέστε το πλήκτρο q
για να βρεθείτε πάλι στη γραμμή εντολών. Αν το περιεχόμενο του patch δείχνει σωστό, μπορείτε να κάνετε commit τις αλλαγές (υποτίθεται ότι βρίσκεστε στο root directory του project):
Κάνοντας commit τις αλλαγές του patch¶
Για να κάνετε commit τις αλλαγές γράψτε:
$ git commit
...\> git commit
Η παραπάνω εντολή ανοίγει έναν επεξεργαστή κειμένου για να γράψετε το μήνυμα του commit. Ακολουθήστε τις οδηγίες για ένα σωστό μήνυμα commit και γράψτε ένα μήνυμα όπως:
Fixed #99999 -- Added a shortcut function to make toast.
Κάνοντας push το commit καθώς και ένα pull request¶
After committing the patch, send it to your fork on GitHub (substitute «ticket_99999» with the name of your branch if it’s different):
$ git push origin ticket_99999
...\> git push origin ticket_99999
Μπορείτε να δημιουργήσετε ένα pull request πηγαίνοντας στην επίσημη σελίδα του Django στο GitHub. Εκεί θα δείτε το δικό σας branch κάτω από την ετικέτα «Your recently pushed branches». Κάντε κλικ στο «Compare & pull request».
Παρακαλούμε να μην το κάνετε για αυτό τον οδηγό, αλλά στην επόμενη σελίδα που θα εμφανιστεί μια προεπισκόπιση του patch σας, θα κάνετε κλικ στο «Create pull request».
Επόμενα βήματα¶
Συγχαρητήρια! Μόλις μάθατε πως να κάνετε pull requests στο Django! Λεπτομέρειες για περισσότερο ανεπτυγμένες τεχνικές, που ίσως χρειαστείτε, θα βρείτε στο Working with Git and GitHub.
Τώρα μπορείτε να χρησιμοποιήσετε αυτές τις τεχνικές για καλό σκοπό βελτιώνοντας τον πηγαίο κώδικα του Django.
Περισσότερες πληροφορίες για του νέους στην συνεισφορά¶
Προτού ξεκινήσετε να γράφετε patches για το Django, υπάρχουν μερικές ακόμη πληροφορίες στις οποίες θα πρέπει να ρίξετε μια ματιά:
- Θα πρέπει να διαβάσετε το εγχειρίδιο του Django σχετικά με κατάθεση patches και διεκδίκηση tickets. Καλύπτει την δεοντολογία του Trac, πως να διεκδικήσετε tickets για τον εαυτό σας, προτεινόμενο στυλ γραφής κώδικα για patches και πολλές άλλες σημαντικές λεπτομέρειες.
- Όσοι από εσάς συνεισφέρουν για πρώτη φορά στο Django θα πρέπει να διαβάσουν το εγχειρίδιο του Django για τους νέους συνεισφέροντες. Περιέχει πολλές και χρήσιμες συμβουλές για εκείνους που θέλουν να βοηθήσουν-υποστηρίξουν την Django κοινότητα.
- Κατόπιν των ανωτέρω, αν θέλετε να μάθετε ακόμη περισσότερα σχετικά με την συνεισφορά, μπορείτε πάντα να ανατρέχετε στην ενότητα του εγχειρίδίου του Django σχετικά με την συνεισφορά. Περιέχει τόνους πληροφορίας και θα πρέπει να είναι η πρώτη πηγή που θα κοιτάξετε για τυχόν ερωτήσεις ή απορίες που μπορεί να προκύψουν.
Εύρεση του πρώτου αληθινού ticket¶
Αφού διαβάσατε και κατανοήσατε τη λογική των patches και των συνεισφορών, πιθανόν να είστε έτοιμοι να αναζητήσετε κάποιο ticket προκειμένου να γράψετε το κατάλληλο patch. Δώστε μεγάλη προσοχή στα tickets με το κριτήριο «easy pickings». Αυτού του είδους τα tickets είναι αρκετά απλά στη φύση τους (όπως απλό ήταν και αυτό που γράψαμε σε αυτόν τον οδηγό) και είναι κομμένα και ραμμένα στα μέτρα των νέων προγραμματιστών που θέλουν να συνεισφέρουν. Όταν εξοικειωθείτε με την συνεισφορά στο Django, μπορείτε να συνεχίσετε και να γράφετε patches και για πιο δύσκολα-περίπλοκα tickets. Η λογική είναι να ξεκινήσετε την επίλυση απλών tickets και σιγά σιγά να επιλύετε ακόμη πιο δύσκολα. Αν πάλι θέλετε να παραμείνετε στην επίλυση απλών tickets κανένα πρόβλημα.
Αν θέλετε να ξεκινήσετε άμεσα (και κανείς δε πρόκειται να σας κατηγορήσει γι” αυτό!), ρίξτε μια ματιά στη λίστα των easy tickets που χρειάζονται patches και στα easy tickets που έχουν patches αλλά χρειάζονται βελτίωση. Αν έχετε εξοικειωθεί με την συγγραφή τεστ, μπορείτε επίσης να κοιτάξετε τη λίστα των easy tickets που χρειάζονται τεστ. Θυμηθείτε μόνο τις κατευθηντήριες γραμμές (guidelines) σχετικά με την διεκδίκηση tickets οι οποίες αναφέρθηκαν στον σύνδεσμο του εγχειρίδίου του Django σχετικά με την :doc:` κατάθεση patches και διεκδίκηση tickets </internals/contributing/writing-code/submitting-patches>`.
Τι γίνετε μετά, αφότου δημιουργήσω ένα pull request;¶
Όταν ένα ticket συνοδεύεται από ένα patch, θα χρειαστεί να κοιταχτεί και από άλλους. Αφού κατατεθεί ένα pull request, θα πρέπει να ενημερώσετε τα metadata του ticket θέτοντας τα κατάλληλα flags πάνω σε αυτό, πχ «has patch», «doesn’t need tests» κλπ, ούτως ώστε άλλοι προγραμματιστές να μπορέσουν να το βρουν και να το κοιτάξουν και εκείνοι. Η συνεισφορά δεν σημαίνει πάντα να γράφετε ένα patch από το μηδέν. Αναθεωρώντας ήδη υπάρχοντα patches αποτελεί μια πολύ σημαντική συνεισφορά. Δείτε λεπτομέρειες στο Triaging tickets.