Βελτιώστε το έργο Django με αυτές τις βέλτιστες πρακτικές

Το Django είναι ένα ισχυρό, ανοιχτού κώδικα, βασισμένο σε Python πλαίσιο για την κατασκευή εφαρμογών ιστού. Η δημοτικότητά του έχει αυξηθεί τα τελευταία δύο χρόνια και είναι ήδη ώριμη και χρησιμοποιείται ευρέως με μια μεγάλη κοινότητα πίσω από αυτήν.

Μεταξύ άλλων πλαισίων που βασίζονται σε Python για τη δημιουργία εφαρμογών ιστού (όπως η φιάλη και η πυραμίδα), το Django είναι μακράν το πιο δημοφιλές. Υποστηρίζει τόσο την έκδοση Python 2.7 όσο και την Python 3.6. Αλλά κατά τη στιγμή αυτού του άρθρου, το Python 2.7 εξακολουθεί να είναι η πιο προσιτή έκδοση από την άποψη της κοινότητας, των πακέτων τρίτων και της διαδικτυακής τεκμηρίωσης. Το Django είναι ασφαλές όταν χρησιμοποιείται σωστά και παρέχει υψηλές διαστάσεις ευελιξίας. Είναι ο τρόπος που πρέπει να ακολουθήσετε κατά την ανάπτυξη εφαρμογών από διακομιστή χρησιμοποιώντας το Python.

Ως έμπειρος προγραμματιστής Python και Django, θα μοιραστώ μαζί σας μερικές βέλτιστες πρακτικές για μια εγκατάσταση του Django που έχω μάθει και συλλέξει όλα αυτά τα χρόνια. Είτε έχετε μερικά έργα Django κάτω από τη ζώνη σας είτε πρόκειται να ξεκινήσετε το πρώτο σας από το μηδέν, οι βέλτιστες πρακτικές που περιγράφονται εδώ μπορεί να σας βοηθήσουν να δημιουργήσετε καλύτερες εφαρμογές στο δρόμο.

Έγραψα αυτό το άρθρο από μια πολύ πρακτική νοοτροπία, ώστε να μπορείτε να προσθέσετε κάποια εργαλεία στην εργαλειοθήκη ανάπτυξης αμέσως. Μπορείτε ακόμη και να δημιουργήσετε ένα προηγμένο προσαρμοσμένο βραχίονα Django για τα επόμενα έργα σας.

Για τους σκοπούς αυτού του άρθρου, υποθέτω ότι χρησιμοποιείτε μια μηχανή Linux Ubuntu. Σε όλο το άρθρο, ορισμένες γραμμές κώδικα ξεκινούν με ένα $σύμβολο. Αυτά χρησιμοποιούνται για να τονίσουν ότι αυτή η γραμμή πρέπει να εισαχθεί στο τερματικό. Φροντίστε να αντιγράψετε τη γραμμή χωρίς το $σύμβολο.

Εικονικό περιβάλλον

Κατά την ανάπτυξη εφαρμογών που βασίζονται σε Python, η χρήση πακέτων τρίτων είναι συνεχής. Αυτά τα πακέτα ενημερώνονται συχνά, οπότε η διατήρησή τους είναι απαραίτητη. Κατά την ανάπτυξη όλο και περισσότερων έργων στον ίδιο τοπικό υπολογιστή, είναι δύσκολο να παρακολουθείτε την τρέχουσα έκδοση κάθε πακέτου. Είναι αδύνατο να χρησιμοποιηθούν διαφορετικές εκδόσεις του ίδιου πακέτου για διαφορετικά έργα. Επιπλέον, η ενημέρωση ενός πακέτου σε ένα έργο ενδέχεται να σπάσει τη λειτουργικότητα σε ένα άλλο και το αντίστροφο.

Εκεί είναι το πρακτικό περιβάλλον Python. Για να εγκαταστήσετε εικονικό περιβάλλον χρησιμοποιήστε:

$ apt-get update $ apt-get install python-pip python-dev build-essential $ export LC_ALL="en_US.UTF-8" # might be necessary in case you get an error from the next line $ pip install --upgrade pip $ pip install --upgrade virtualenv $ mkdir ~/.virtualenvs $ pip install virtualenvwrapper $ export WORKON_HOME=~/.virtualenvs $ nano ~/.bashrc

Προσθέστε αυτήν τη γραμμή στο τέλος του αρχείου:

. /usr/local/bin/virtualenvwrapper.sh

Στη συνέχεια εκτελέστε:

$ . .bashrc

Μετά την εγκατάσταση, δημιουργήστε ένα νέο εικονικό περιβάλλον για το έργο σας πληκτρολογώντας:

$ mkvirtualenv project_name

Ενώ βρίσκεστε στο περιβάλλον του εικονικού σας περιβάλλοντος, θα παρατηρήσετε ότι ένα πρόθεμα προστίθεται στο τερματικό, όπως:

(project_name) [email protected]:~$

Για να απενεργοποιήσετε (βγείτε) το εικονικό περιβάλλον και να επιστρέψετε στο κύριο περιβάλλον Python του τοπικού σας μηχανήματος, χρησιμοποιήστε:

$ deactivate

Για να ενεργοποιήσετε (ξεκινήσετε) το περιβάλλον εικονικού περιβάλλοντος, χρησιμοποιήστε:

$ workon project_name

Για να απαριθμήσετε τα εικονικά περιβάλλοντα που υπάρχουν στον τοπικό υπολογιστή σας, χρησιμοποιήστε:

$ lsvirtualenv

Κρατώντας τις εξαρτήσεις του έργου σας (πακέτα) σε ένα εικονικό περιβάλλον στο μηχάνημά σας, μπορείτε να τα διατηρείτε σε απομονωμένο περιβάλλον. Τα χρησιμοποιείτε μόνο για ένα (ή πολλαπλά) έργα. Κατά τη δημιουργία ενός νέου εικονικού περιβάλλοντος, ξεκινάτε ένα νέο περιβάλλον χωρίς εγκατεστημένα πακέτα. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε, για παράδειγμα:

(project_name) $ pip install Django

για την εγκατάσταση του Django στο εικονικό σας περιβάλλον ή:

(project_name) $ pip install Django==1.11

για την εγκατάσταση της έκδοσης 1.11 του Django προσβάσιμη μόνο από το περιβάλλον.

Ούτε ο κύριος διερμηνέας Python ούτε τα άλλα εικονικά περιβάλλοντα του υπολογιστή σας θα έχουν πρόσβαση στο νέο πακέτο Django που μόλις εγκαταστήσατε.

Για να χρησιμοποιήσετε την εντολή runerver χρησιμοποιώντας το εικονικό σας περιβάλλον, ενώ στο πλαίσιο του εικονικού περιβάλλοντος, χρησιμοποιήστε:

(project_name) $ cd /path/to/django/project (project_name) $ ./manage.py runserver

Ομοίως, κατά την είσοδο του διερμηνέα Python μέσα από το εικονικό περιβάλλον, πληκτρολογήστε:

(project_name) $ python

Θα έχει πρόσβαση σε πακέτα που έχετε ήδη εγκαταστήσει στο περιβάλλον.

Απαιτήσεις

Απαιτήσεις είναι η λίστα των πακέτων Python (εξαρτήσεις) που χρησιμοποιεί το έργο σας ενώ εκτελείται, συμπεριλαμβανομένης της έκδοσης για κάθε πακέτο. Ακολουθεί ένα παράδειγμα για ένα requirements.txtαρχείο:

dicttoxml==1.7.4 Django==1.11.2 h5py==2.7.0 matplotlib==2.0.2 numpy==1.13.0 Pillow==4.1.1 psycopg2==2.7.1 pyparsing==2.2.0 python-dateutil==2.6.0 pytz==2017.2 six==1.10.0 xmltodict==0.11.0

Η ενημέρωση του requirements.txtαρχείου σας είναι απαραίτητη για τη σωστή συνεργασία με άλλους προγραμματιστές. Είναι επίσης σημαντικό να διατηρείτε το περιβάλλον παραγωγής σας σωστά διαμορφωμένο. Αυτό το αρχείο, όταν περιλαμβάνεται στο αποθετήριο κώδικα, σας επιτρέπει να ενημερώσετε όλα τα πακέτα που είναι εγκατεστημένα στο εικονικό σας περιβάλλον εκτελώντας μία γραμμή στο τερματικό. Στη συνέχεια, μπορείτε να ενεργοποιήσετε και να λειτουργήσετε νέους προγραμματιστές σε χρόνο μηδέν.

Για να δημιουργήσετε ένα νέο requirements.txtή να ενημερώσετε ένα υπάρχον, χρησιμοποιήστε μέσα από το εικονικό σας περιβάλλον:

(project_name) $ pip freeze > requirements.txt

For your convenience, make sure to execute this command in a folder that is being tracked by your Git repository. This allows other instances of the code to have access to the requirements.txt file as well.

If a new developer joins the team, or if you want to configure a new environment using the same packages listed in the requirements.txt file, execute in the virtual environment context:

(project_name) $ cd /path/to/requirements/file (project_name) $ pip install -r requirements.txt

All requirements listed in the file will immediately be installed in your virtual environment. Older versions will be updated and newer versions will be downgraded to fit the exact list of requirements.txt. Be careful though — there might be differences between environments that you still want to respect.

I highly recommend integrating these commands to your work flow. Update the requirements.txt file before pushing code to the repository and install requirements.txt file after pulling code from the repository.

Better settings.py configuration

Django comes out-of-the-box with a very basic yet useful settings.py file. This defines the main and most useful configurations for your project. The settings.py file is very straightforward. But sometimes, as a developer working on a team, or when setting up a production environment, you need more than one basic settings.py file.

Multiple settings files allow you to easily define tailor-made configurations for each environment separately like:

ALLOWED_HOSTS # for production environment DEBUG DATABASES # for different developers on the same team

Let me introduce you to an extended approach for configuring your settings.py file. It allows you to maintain different versions and use the one you want at any given time and in any environment.

First, navigate to your settings.py file path:

(project_name) $ cd /path/to/settings/file

Then create a new module called settings (module is a folder containing an __init__.py file):

(project_name) $ mkdir settings

Now, rename your settings.py file to base.py and place it inside the new module you created:

(project_name) $ mv settings.py settings/base.py

For this example, I assume that you want to configure one settings file for your development environment and one for your production environment. Different developers on the same team can use the exact same approach for defining different settings files.

For your development environment create:

(project_name) $ nano settings/development.py

Then type:

from .base import * DEBUG = True

and save the file by hitting Ctrl + O, Enter and then Ctrl + X.

For your production environment create:

(project_name) $ nano settings/production.py

and type:

from .base import * DEBUG = False ALLOWED_HOSTS = [‘app.project_name.com’, ]

Now, whenever you want to add or update the settings of a specific environment, you can easily do it in its own settings file.

You might be wondering — how does Django know which settings file to load on each environment? That’s what the __init__.py file is used for. When Django looks for the settings.py it used to load when running the server, for example, it now finds a settings module rather than a settings.py file. But as long as it’s a module containing an __init__.py file, as far as Django is concerned, it’s the exact same thing. Django will load the __init__.py file and execute whatever is written in it.

Therefore, we need to define which settings file we want to load inside the __init__.py file by executing:

(project_name) $ settings/__init__.py

and then, for a production environment, for example, by typing:

from .production import *

This way, Django will load all the base.py and production.py settings every time it starts. Magic?

Now, the only configuration left is to keep the __init__.py in your .gitignore file so it will not be included in pushes and pulls. Once you set up a new environment, don’t forget to create a new __init__.py file inside the settings module. Then import the settings file required exactly like we did before.

In this article we’ve covered three best practices for better setting up your Django project:

  • Working inside a virtual environment
  • Keeping the requirements.txt file up to date and using it continuously in your work flow
  • Setting up a better project settings array

Have you followed these best practices in your last project? Do you have any insights to share? Comments are highly appreciated.

Το βρήκατε αυτό χρήσιμο; Εάν ναι, παρακαλώ δώστε μου χειροκρότημα, ώστε περισσότεροι άνθρωποι να δουν το άρθρο.

Αυτό είναι το μέρος 1 της σειράς σχετικά με τις βέλτιστες πρακτικές για την ανάπτυξη του Django. Ακολουθήστε με για να λάβω μια άμεση ενημέρωση μόλις είναι διαθέσιμα τα επόμενα μέρη.

Βρείτε περισσότερες εξαιρετικές συμβουλές για τεχνολογικούς επιχειρηματίες στο CodingStartups.