Was Sie tun sollten, wenn Sie mit Django entwickeln. Es wird schwierig sein, es später zu ändern, daher ist es möglicherweise besser, es in der Anfangsphase einzustellen, wenn auch nicht immer. ** "Einstellungen des Einstellungsverzeichnisnamens, der settings.py enthält" ** und ** "Erweitertes Benutzermodell" ** sollten erstellt werden.
Es mag viele andere Dinge geben, aber als Memorandum in dieser Phase.
――Personen, die gerade die Tutorial-ähnlichen Unterrichtsmaterialien von Django fertiggestellt haben und im Begriff sind, Apps zu erstellen.
Dies ist eine Maßnahme, um die Verzeichnisstruktur des Projekts verständlicher zu machen. Wenn Sie normalerweise mit der Projekterstellung als "$ django-admin startproject myproject" beginnen, werden der Name des Basisverzeichnisses und der Name des Einstellungsverzeichnisses mit demselben Namen erstellt (in diesem Fall "myproject"), sodass es schwierig ist, zwischen ihnen zu unterscheiden. Ich werde.
Dies bedeutet, dass Sie beim Erstellen eines Projekts mit diesem Befehl eine solche Verzeichnisstruktur haben.
myproject <-Basisverzeichnis
|-- manage.py
`-- myproject <-Konfigurationsverzeichnis
|-- __init__.py
|-- settings.py
|-- urls.py
|-- manage.py
`-- wsgi.py
Es gibt ein Basisverzeichnis mit demselben Namen wie der Projektname (in diesem Fall myproject
) und ein Einstellungsverzeichnis mit demselben Namen wird darin erstellt.
(Übrigens [Django-Lehrbuch << Grundlagen >>, das vor Ort verwendet werden kann], das zum Lernen verwendet wird [https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81] % A7% E4% BD% BF% E3% 81% 88% E3% 82% 8B-Django-% E3% 81% AE% E6% 95% 99% E7% A7% 91% E6% 9B% B8% E3% 80% 8A% E5% 9F% BA% E7% A4% 8E% E7% B7% A8% E3% 80% 8B-% E6% A8% AA% E7% 80% AC-% E6% 98% 8E% E4% BB% 81 / dp / 4802094744) erleichtert die Unterscheidung
django-admin startproject
erstellt wurde
--Settings directory = Verzeichnis mit settings.py
Da es heißt, werde ich diesem Namen folgen)
Wenn Sie ein Projekt erstellen, verschieben Sie es nach dem Erstellen des Basisverzeichnisses mit einem beliebigen Namen (Projektname) unter das Basisverzeichnis, geben Sie im ersten Argument den Namen des Einstellungsverzeichnisses (hier config
) und im zweiten Argument .
an. Führen Sie dann "Projekt starten" aus.
$mkdir myproject (geben Sie hier den Projektnamen ein)
$ cd myproject/
$ django-admin startproject config .
Auf diese Weise wird die Verzeichnisstruktur
myproject <-Basisverzeichnis
|-- manage.py
`-- config <-Konfigurationsverzeichnis*Dieser Name ändert sich
|-- __init__.py
|-- settings.py
|-- urls.py
|-- manage.py
`-- wsgi.py
So ist die Struktur leicht zu verstehen.
Django verfügt standardmäßig über ein Benutzermodell, mit dem Anmeldefunktionen usw. einfach implementiert werden können. Das allein ist sehr praktisch, aber um die Verwendung des Benutzermodells zu vereinfachen, wird [offiziell empfohlen], ein benutzerdefiniertes Benutzermodell zu erstellen [https://docs.djangoproject.com/ja/2.0/topics/ auth / customizing / # using-a-custom-user-model-beim-Starten-eines-Projekts).
Es gibt drei Möglichkeiten, das Benutzermodell zu erweitern.
AbstractBaseUser
Jede Methode hat ihre Vor- und Nachteile. Wenn die Entwicklung fortschreitet und bereits Daten in der Datenbank vorhanden sind, scheint Methode 3 gut zu sein. 1 oder 2 wird in der ersten Phase des Beginns der Anwendungsproduktion empfohlen, aber 1 scheint für Anfänger bis Anfänger schwierig zu sein, so dass es sicher ist, sich zunächst an Methode 2 zu gewöhnen.
Mit Methode 2 können Sie Ihrem Benutzermodell eigene Spalten hinzufügen.
Es ist einfach, ein benutzerdefiniertes Benutzermodell zu erstellen.
① Beschreiben Sie in app / models.py
( app
ist der Name des Anwendungsverzeichnisses).
② Setzen Sie AUTH_USER_MODEL
in config / settings.py
( config
ist der Name des Einstellungsverzeichnisses, das beim Erstellen des Projekts erstellt wurde)
③ Migrieren
Definieren Sie hier ein benutzerdefiniertes Benutzermodell. (Da die Informationen, die dem Benutzermodell zugrunde liegen, im Modell "AbstractUser" definiert sind, werden sie vererbt und verwendet.)
Hier können Sie den Tabellennamen und die Spalten angeben, die Sie hinzufügen möchten. Sie können beispielsweise eine Tabelle mit dem Namen "custome_user" mit einer Spalte mit dem Namen "Calendar" mit einem externen Schlüssel festlegen.
app/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
class Meta(AbstractUser.Meta):
db_table = 'custom_user'
swappable = 'AUTH_USER_MODEL'
calendar = models.ForeignKey(Calendar, verbose_name='Aktiver Kalender', on_delete=models.PROTECT, blank=True, null=True)
Da dies ein Beispiel für meinen tatsächlichen Code ist, habe ich ein Modell namens "Kalender" mit dem Benutzermodell verknüpft. Wenn Sie jedoch möchten, dass das Benutzermodell Geschlecht, Alter, E-Mail-Adresse, Kennwort usw. enthält, geben Sie die Spalte hier an. Ich denke du solltest es mir geben. Da die Spalte zum Standardbenutzermodell hinzugefügt wird, bleibt die ursprüngliche Spalte erhalten (den Inhalt des Standardbenutzermodells finden Sie am Ende dieses Artikels in MEMO).
AUTH_USER_MODEL
in settings.py
Definieren Sie das benutzerdefinierte Benutzermodell, das hier verwendet werden soll. Beschreiben Sie als "app name.model name"
config/settings.py
AUTH_USER_MODEL = app.CustomUser
Wenn Sie das Modell ändern, können Sie die Standarddatenbank migrieren.
$ Python manage.py makemigrations
$ Python manage.py migrate
In Bezug auf die anzugebende Version scheint es keinen Fehler zu geben, wenn Sie die Version übernehmen, die ** LTS (Langzeitunterstützung) ** (= Version mit Langzeitsicherheitsunterstützung) entspricht.
--2.2 => Support bis April 2022 --1.11 => Unterstützung bis April 2020
Die Django 3-Serie wurde übrigens im Dezember 2019 veröffentlicht, aber 3.2, was LTS entspricht, soll im April 2021 erscheinen.
Wenn es keinen bestimmten Grund gibt, ist es richtig, im Moment mit dem neuesten LTS zu beginnen? Es ist ein Eindruck. (Wenn das Bereitstellungsziel festgelegt wurde, muss möglicherweise untersucht werden, ob der Server es unterstützt.)
Django hat das Konzept von "Projekt" und "Anwendung", also lasst es uns ein wenig organisieren.
Projekt
Die gesamte zu erstellende WEB-Anwendung.
$ django-admin startproject myproject
Die mit dem Befehl erstellte (myproject
ist der Projektname)
Anwendung
Eine Gruppe kleiner Funktionen, die zu einem Projekt gehören
python3 manage.py startapp myapp
Die mit dem Befehl erstellte (myapp
ist der Anwendungsname)
Wenn Sie einen WEB-Service erstellen, erstellen Sie ein Projekt. Wenn es sich um einen kleinen Service handelt, erstellen Sie eine Anwendung darin und implementieren Sie sie. Mit zunehmender Größe eines Projekts können mehrere Anwendungen in einem Projekt erstellt und betrieben werden.
Wenn Sie mehrere Anwendungen erstellen, scheint die Wartung einfacher zu sein, wenn Sie dies berücksichtigen.
Nachdem ich die Tutorial-ähnlichen Unterrichtsmaterialien fertiggestellt hatte, stellte ich sie unterwegs vor.
[Django-Lehrbuch << Grundlagen >>, die vor Ort verwendet werden können](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF% E3% 81% 88% E3% 82% 8B-Django-% E3% 81% AE% E6% 95% 99% E7% A7% 91% E6% 9B% B8% E3% 80% 8A% E5% 9F% BA % E7% A4% 8E% E7% B7% A8% E3% 80% 8B-% E6% A8% AA% E7% 80% AC-% E6% 98% 8E% E4% BB% 81 / dp / 4802094744)
Dieses Buch ist sehr leicht zu verstehen und bringt Ihr Studium voran!
Es deckt eine breite Palette von Grundlagen ab und ist gut zum Aufbau und Verstehen von Wissen. Sie können lesen, während Sie eine Prise essen. Viele der diesmal zusammengefassten Best-Practice-Methoden werden veröffentlicht und sind sehr nützlich.
Als Referenz werden die in Django 2.1.7 bestätigten Felder des Benutzermodells aufgelistet. Das Standardbenutzermodell erbt vom AbstractUser-Modell, sodass die Spaltennamen im AbstractUser-Modell beim Erstellen eines benutzerdefinierten Benutzermodells übernommen werden.
lib/django/contrib/auth/models.py
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions.
Username and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=150, blank=True)
email = models.EmailField(_('email address'), blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
abstract = True
def clean(self):
super().clean()
self.email = self.__class__.objects.normalize_email(self.email)
def get_full_name(self):
"""
Return the first_name plus the last_name, with a space in between.
"""
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()
def get_short_name(self):
"""Return the short name for the user."""
return self.first_name
def email_user(self, subject, message, from_email=None, **kwargs):
"""Send an email to this user."""
send_mail(subject, message, from_email, [self.email], **kwargs)
class User(AbstractUser):
"""
Users within the Django authentication system are represented by this
model.
Username and password are required. Other fields are optional.
"""
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
Recommended Posts