Django είναι ένα πολύ γνωστό web framework για τη γρήγορη ανάπτυξη ασφαλών και εύκολα συντηρήσιμων ιστότοπων και εφαρμογών ιστού. Κατασκευασμένο με τη χρήση του Python, το Django απλοποιεί την ανάπτυξη ιστού, επιτρέποντας περισσότερο χρόνο και εστίαση στη συγγραφή εφαρμογών χωρίς να ανακαλύπτετε ξανά τον τροχό κάθε φορά. Το Django είναι ένα δωρεάν έργο ανοιχτού κώδικα με ισχυρή επίσημη τεκμηρίωση, εξαιρετική υποστήριξη από την κοινότητα και άφθονη δωρεάν και επί πληρωμή υποστήριξη.
Σε αυτόν τον οδηγό, θα εμβαθύνουμε στη δημιουργία μοντέλων Django. Στο Django, ένα μοντέλο είναι η βασική πηγή πληροφοριών για τα δεδομένα σας. Τα μοντέλα περιγράφουν τα πεδία και τη συμπεριφορά των δεδομένων που πρόκειται να αποθηκευτούν. Το Django χρησιμοποιεί το μοντέλο για να δημιουργήσει τους πίνακες της βάσης δεδομένων χρησιμοποιώντας ORM (Object Relational Mapping), που αναφέρονται επίσης ως μοντέλα.
Προαπαιτούμενα
Εργαζόμαστε σε ένα λειτουργικό σύστημα βασισμένο στο Unix, κατά προτίμηση σε έναν Ubuntu 20.04 cloud server ως το σύστημα στο οποίο κάναμε τις δοκιμές. Εάν θέλετε να εγκαταστήσετε το Django σε παρόμοιο περιβάλλον, ανατρέξτε στον οδηγό μας, «Πώς να εγκαταστήσετε το Django και να ρυθμίσετε ένα περιβάλλον ανάπτυξης στο Ubuntu 20.04.”
Βήμα 1. Περιβάλλον ανάπτυξης Python
Το Django είναι βασισμένο στην Python. Επομένως, χρειαζόμαστε ένα ισχυρό περιβάλλον ανάπτυξης Python με όλα τα απαραίτητα εργαλεία για να εργαστούμε με εφαρμογές Python. Το έχουμε ήδη συζητήσει σε έναν ειδικό οδηγό. Εδώ, θα κάνουμε μια σύντομη παρουσίαση.
Αρχικά, ανοίξτε ένα τερματικό και εκτελέστε τις ακόλουθες εντολές:
|
1 2 |
$ sudo apt update && sudo apt upgrade -y $ sudo apt install python3 python-is-python3 |
Στη συνέχεια, εγκαταστήστε το pip – τον διαχειριστή πακέτων της Python:
|
1 |
$ sudo apt install python3-pip |
Στη συνέχεια, εγκαταστήστε ορισμένα πρόσθετα πακέτα ανάπτυξης:
|
1 |
$ sudo apt install build-essential libssl-dev libffi-dev python3-dev |
Για να δημιουργήσουμε ένα εικονικό περιβάλλον, χρειαζόμαστε επίσης τη μονάδα της Python venv module:
|
1 |
$ sudo apt install python3-venv |
Βήμα 2. Εγκατάσταση του MySQL Server
Η MySQL είναι ένα δημοφιλές σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων. Είναι ανοιχτού κώδικα, σταθερή και πλούσια σε χαρακτηριστικά. Θα χρησιμοποιήσουμε τη MySQL ως διακομιστή βάσης δεδομένων για την εφαρμογή Django μας. Εγκαταστήστε τη MySQL χρησιμοποιώντας το APT:
|
1 |
$ sudo apt install mysql-server |
Στη συνέχεια, επαληθεύστε την εγκατάσταση:
|
1 |
$ systemctl status mysql |
Πρόκειται για μια απλή βασική εγκατάσταση της MySQL με τις προεπιλεγμένες επιλογές. Δείτε τον πιο αναλυτικό οδηγό σχετικά με την εγκατάσταση και ρύθμιση παραμέτρων της MySQL.
Step 3. Setting Up the Django App
Είμαστε πλέον έτοιμοι να δημιουργήσουμε την εφαρμογή Django μας. Εάν ενδιαφέρεστε για μια πιο αναλυτική παρουσίαση του Django, ανατρέξτε στον οδηγό μας, «Εγκατάσταση του Django Web Framework στο Ubuntu 20.04.”
Στη συνέχεια, δημιουργήστε έναν αποκλειστικό κατάλογο για την εφαρμογή. Το όνομα του καταλόγου θα πρέπει να αντικατοπτρίζει το όνομα του έργου:
|
1 |
$ mkdir -pv <project_dir> |
Μέσα στον κατάλογο του έργου, δημιουργήστε ένα εικονικό περιβάλλον Python χρησιμοποιώντας τη μονάδα venv module:
|
1 |
$ python3 -m venv <virtual_env_name> |
Ενεργοποιήστε το εικονικό περιβάλλον:
|
1 |
$ . sample_app_env/bin/activate |
Εγκαταστήστε το Django χρησιμοποιώντας το pip:
|
1 |
$ pip install django |
Στη συνέχεια, δημιουργήστε ένα νέο έργο Django χρησιμοποιώντας την εντολή django-admin command:
|
1 |
$ django-admin startproject sample_app |
Βήμα 4. Ρύθμιση παραμέτρων της εφαρμογής Django
Η εφαρμογή Django περιέχει όλες τις προεπιλεγμένες ρυθμίσεις. Για τον σκοπό μας, πρέπει να κάνουμε ορισμένες προσαρμογές.
Ξεκινήστε επεξεργαζόμενοι το αρχείο ρυθμίσεων settings.py:
|
1 |
$ nano sample_app/sample_app/sample_app/settings.py |
Στη συνέχεια, αλλάξτε τη ζώνη ώρας:
|
1 |
$ TIME_ZONE = '<time_zone>' |
Προσθέστε τα μηχανήματα που επιτρέπεται να έχουν πρόσβαση στον διακομιστή της εφαρμογής Django:
|
1 |
$ ALLOWED_HOSTS = ['<allowed_host_ip_or_domain_name >'] |
Μετά από αυτό, εφαρμόστε τις αλλαγές:
|
1 |
$ python manage.py migrate |
Τέλος, δημιουργήστε έναν υπερχρήστη (superuser) για την εφαρμογή ιστού Django μας:
|
1 |
$ python manage.py createsuperuser |
Βήμα 5. Σύνδεση της εφαρμογής Django στη MySQL
Για να συνδεθούμε στη MySQL, χρειαζόμαστε μια επιπλέον βιβλιοθήκη σύνδεσης Python που είναι συμβατή με το Django. Θα χρησιμοποιήσουμε το mysqlclient.
Αρχικά, βεβαιωθείτε ότι έχουμε εγκαταστήσει τα απαραίτητα πακέτα:
|
1 |
$ sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev |
Στη συνέχεια, εγκαταστήστε το mysqlclient:
|
1 |
$ pip install mysqlclient |
- Δημιουργία αποκλειστικής βάσης δεδομένων
Για την εφαρμογή μας, πρέπει να δημιουργήσουμε μια αποκλειστική βάση δεδομένων και έναν χρήστη βάσης δεδομένων. Εκκινήστε το κέλυφος MySQL ως root:
|
1 |
$ sudo mysql -u root |
Δημιουργήστε μια αποκλειστική βάση δεδομένων για την εφαρμογή Django μας:
|
1 |
$ CREATE DATABASE <dedicated_database>; |
Στη συνέχεια, δημιουργήστε έναν αποκλειστικό χρήστη βάσης δεδομένων για την εφαρμογή Django:
|
1 |
$ CREATE USER '<username>'@'%' IDENTIFIED WITH mysql_native_password BY '<user_password>'; |
Τέλος, παραχωρήστε στον αποκλειστικό χρήστη πλήρη δικαιώματα στην αποκλειστική βάση δεδομένων:
|
1 |
$ GRANT ALL ON <database>.* TO '<username'@'%'; |
- Αλλαγή της ρύθμισης παραμέτρων του Django για χρήση της MySQL
Τώρα, πρέπει να τροποποιήσουμε κάποιες ρυθμίσεις του Django ώστε να μπορεί να χρησιμοποιήσει τη MySQL ως διακομιστή βάσης δεδομένων. Ανοίξτε το settings.py σε έναν επεξεργαστή κειμένου:
|
1 |
$ nano settings.py |
Κυλήστε προς τα κάτω στην ενότητα DATABASES και επικολλήστε τον ακόλουθο κώδικα:
|
1 2 3 4 5 6 7 8 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/etc/mysql/my.cnf', }, } } |
Στη συνέχεια, επεξεργαστείτε το αρχείο ρυθμίσεων της MySQL ώστε να περιέχει τα απαραίτητα διαπιστευτήρια της βάσης δεδομένων:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Προσθέστε το ακόλουθο μπλοκ στο τέλος του αρχείου:
|
1 2 3 4 5 |
[client] database = <dedicated_database> user = <dedicated_user> password = <user_password> default-character-set = utf8 |
Επανεκκινήστε τη MySQL για να εφαρμοστούν οι αλλαγές:
|
1 2 |
$ sudo systemctl daemon-reload $ sudo systemctl restart mysql |
Βήμα 6. Δημιουργία ενός μοντέλου Django
Είμαστε πλέον έτοιμοι να δημιουργήσουμε ένα νέο μοντέλο μέσα στο έργο Django μας. Ενεργοποιήστε το εικονικό περιβάλλον:
|
1 2 3 |
$ cd sample_app/ $ . sample_app_env/bin/activate $ cd sample_app/ |
Σε αυτήν την τοποθεσία, πείτε στο Django να δημιουργήσει μια νέα εφαρμογή:
|
1 |
$ python manage.py startapp <new_app> |
Μετά τη δημιουργία, το δέντρο αρχείων θα πρέπει να μοιάζει κάπως έτσι. Εδώ, το αρχείο models.py θα περιέχει τους κώδικες για το προσαρμοσμένο μοντέλο Django μας:
Ελέγξτε το τρέχον περιεχόμενο του αρχείου:
|
1 |
$ cat models.py |
Για επίδειξη, πρόκειται να δημιουργήσουμε ένα μοντέλο για αναρτήσεις ιστολογίου με το όνομα Post. Θα περιέχει τα ακόλουθα πεδία:
title: Τίτλος ανάρτησης ιστολογίου.slug: Αποθηκεύει και δημιουργεί έγκυρες διευθύνσεις URL για ιστοσελίδες.content: Το κείμενο της ανάρτησης ιστολογίου.created_on: Ημερομηνία δημιουργίας της ανάρτησης.author: Ο χρήστης που δημιούργησε την ανάρτηση.
Ανοίξτε το αρχείο models.py σε έναν επεξεργαστή κειμένου:
|
1 |
$ nano models.py |
Ας εισαγάγουμε μερικά απαραίτητα API για το μοντέλο μας. Από προεπιλογή, εισάγει το API των μοντέλων. Θα χρειαστούμε επίσης το API slugify για τη δημιουργία slugs, το User για έλεγχο ταυτότητας, και το reverse για καλύτερη και πιο ευέλικτη δημιουργία URL:
|
1 2 3 4 |
from django.db import models from django.template.defaultfilters import slugify from django.contrib.auth.models import User from django.urls import reverse |
Στη συνέχεια, προσθέστε τη μέθοδο κλάσης που ονομάζεται Post. Θα περιέχει τα απαραίτητα πεδία βάσης δεδομένων όπως title, slug, content, created_on, και author:
|
1 2 3 4 5 6 |
class Post(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True, max_length=255) content = models.TextField() created_on = models.DateTimeField(auto_now_add=True) author = models.TextField() |
Χρειαζόμαστε τη λειτουργικότητα για τη δημιουργία URL και την αποθήκευση της ανάρτησης. Είναι σημαντικό καθώς δημιουργεί μοναδικούς συνδέσμους που αντιστοιχούν σε μοναδικές αναρτήσεις:
|
1 2 3 4 5 6 7 |
def get_absolute_url(self): return reverse('blog_post_detail', args=[self.slug]) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.title) super(Post, self).save(*args, **kwargs) |
Η επόμενη ενότητα θα καθορίσει στο μοντέλο τη σειρά ταξινόμησης της ανάρτησης και την εμφάνισή της στην ιστοσελίδα. Θα κωδικοποιήσουμε τη λογική χρησιμοποιώντας μια εσωτερική κλάση, Meta. Θα περιέχει πρόσθετη λογική μοντέλου που δεν αφορά τον ορισμό των πεδίων της βάσης δεδομένων:
|
1 2 3 4 5 |
class Meta: ordering = ['created_on'] def __unicode__(self): return self.title |
Τέλος, θα έχουμε τη δυνατότητα του μοντέλου Comment σε αυτό το αρχείο. Απαιτεί την προσθήκη μιας άλλης κλάσης Comment χρησιμοποιώντας το models.Model ως υπογραφή του. Θα περιέχει τα ακόλουθα πεδία βάσης δεδομένων:
- name: Όνομα σχολιαστή.
- email: Διεύθυνση email σχολιαστή.
- text: Περιεχόμενο του ίδιου του σχολίου.
- post: Η ανάρτηση στην οποία έγινε το σχόλιο.
- created_on: Ώρα δημιουργίας του σχολίου.
Ο κώδικας θα μοιάζει κάπως έτσι:
|
1 2 3 4 5 6 7 |
class Comment(models.Model): name = models.CharField(max_length=42) email = models.EmailField(max_length=75) website = models.URLField(max_length=200, null=True, blank=True) content = models.TextField() post = models.ForeignKey(Post, on_delete=models.CASCADE) created_on = models.DateTimeField(auto_now_add=True) |
Σε αυτό το σημείο, το αρχείο μας models.py θα έχει αυτή τη μορφή:
Τέλος, αποθηκεύστε το αρχείο και κλείστε τον επεξεργαστή κειμένου.
Βήμα 7. Ενημέρωση των ρυθμίσεων του Django
Το μοντέλο δημιουργήθηκε. Ωστόσο, πρέπει να τροποποιήσουμε ορισμένα αρχεία ρυθμίσεων για να θέσουμε το μοντέλο σε λειτουργία. Μέσα στο settings.py, πρέπει να προσθέσουμε το μοντέλο μας κάτω από το INSTALLED_APPS.
Ανοίξτε το settings.py σε έναν επεξεργαστή κειμένου:
|
1 |
$ nano settings.py |
Καταχωρίστε τη νέα ενότητα κάτω από το τμήμα INSTALLED_APPS:
Αποθηκεύστε το αρχείο και κλείστε τον επεξεργαστή κειμένου.
Βήμα 8. Μεταφορά αλλαγών
Τώρα που προσθέσαμε όλα τα επιθυμητά μοντέλα, το επόμενο βήμα είναι η εφαρμογή αυτών των αλλαγών. Το Django θα εφαρμόσει αυτά τα σχήματα στη MySQL βάση δεδομένων μας.
Η ακόλουθη εντολή θα δημιουργήσει όλα τα απαραίτητα αρχεία μεταφοράς. Το αποτέλεσμα θα δείξει τις τοποθεσίες όλων αυτών των αρχείων μέσα στον κατάλογο του έργου:
|
1 |
$ python manage.py makemigrations |
Η ακόλουθη εντολή θα εμφανίσει μια λίστα με όλες τις υπάρχουσες μεταφορές:
|
1 |
$ python manage.py showmigrations |
Σημειώστε ότι όλες οι μεταφορές είναι σημειωμένες εκτός από την 0001_initial που δημιουργήθηκε ως μέρος των μοντέλων Post και Comment.
Η ακόλουθη εντολή θα δείξει ποιο ερώτημα SQL θα εκτελέσει το Django για να πραγματοποιήσει τις μεταφορές:
|
1 |
$ python manage.py sqlmigrate random_app 0001_initial |
Το μόνο που χρειαζόμαστε τώρα είναι να εφαρμόσουμε τις μεταφορές. Αυτές οι μεταφορές θα εγγράψουν τις αλλαγές στη βάση δεδομένων:
|
1 |
$ python manage.py migrate |
Βήμα 9. Επαλήθευση αλλαγών
Για να επαληθεύσετε τις αλλαγές, ας ρίξουμε μια ματιά στη βάση δεδομένων MySQL μας. Εκκινήστε το κέλυφος της MySQL ως χρήστης Django:
|
1 |
$ mysql sample_app_data -u sample_app_user |
Στη συνέχεια, αλλάξτε την τρέχουσα ενεργή βάση δεδομένων στη βάση δεδομένων της εφαρμογής Django:
|
1 |
$ USE <django_dedicated_database>; |
Εμφανίστε τη λίστα με όλους τους πίνακες από τη βάση δεδομένων:
|
1 |
$ SHOW TABLES; |
Τέλος, για να δείτε το περιεχόμενο οποιουδήποτε από τους πίνακες, χρησιμοποιήστε το DESCRIBE ερώτημα:
|
1 2 |
$ DESCRIBE random_app_comment; $ DESCRIBE random_app_post; |
Περιορισμοί του Django με τη MySQL
Όταν χρησιμοποιείτε τη MySQL ως διακομιστή βάσης δεδομένων για την εφαρμογή Django σας, υπάρχουν μερικά πράγματα που πρέπει να έχετε κατά νου:
- Δεν υπάρχει μεγάλη υποστήριξη για συναλλαγές (transactions) γύρω από διαδικασίες τροποποίησης σχήματος. Αυτό σημαίνει ότι, εάν μια μεταφορά (migration) αποτύχει, απαιτείται η χειροκίνητη αναίρεση όλων των αλλαγών πριν δοκιμάσετε μια άλλη μεταφορά. Δεν υπάρχει τρόπος επαναφοράς (roll back) σε προηγούμενο σημείο όπου η αποτυχημένη μεταφορά δεν είχε πραγματοποιηθεί.
- Για τις περισσότερες από τις διαδικασίες τροποποίησης σχήματος, η MySQL ξαναγράφει πλήρως τους πίνακες. Σε ορισμένες περιπτώσεις, αυτό μπορεί να είναι πραγματικά χρονοβόρο. Στη χειρότερη περίπτωση, η χρονική πολυπλοκότητα θα είναι ανάλογη με τον αριθμό των γραμμών που πρέπει να προστεθούν ή των στηλών που πρέπει να αφαιρεθούν. Σύμφωνα με την επίσημη τεκμηρίωση του Django, θα μπορούσε να χρειαστεί ένα λεπτό ανά εκατομμύριο γραμμές.
- Η MySQL επιβάλλει ένα όριο χαρακτήρων για τα μήκη των ονομάτων στηλών, πινάκων και ευρετηρίων. Υπάρχει επίσης ένα όριο στο συνολικό μέγεθος όλων των στηλών και των καλυμμάτων ευρετηρίου. Το Django μπορεί να υπερβεί αυτό το όριο. Ορισμένα άλλα συστήματα υποστήριξης (backends) εκτός από τη MySQL μπορούν να διαχειριστούν το υψηλότερο όριο του Django.
Γι' αυτό συνιστάται ανεπιφύλακτα να σταθμίσετε τις επιλογές σας και να επιλέξετε την κατάλληλη.
Τελικές Σκέψεις
Αυτός ο οδηγός δείχνει με επιτυχία πώς να προσθέσετε ενότητες (modules) σε μια υπάρχουσα εφαρμογή Django. Χρησιμοποιήσαμε τη MySQL ως σύστημα υποστήριξης (backend) για την εφαρμογή. Παρουσιάζει επίσης ορισμένες βασικές έννοιες του Django, όπως τα μοντέλα (models), πώς λειτουργεί η μεταφορά (migration) και πώς το Django μεταφράζει τα μοντέλα σε πίνακες βάσης δεδομένων MySQL.
Καλό προγραμματισμό!





















Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.