[PYTHON] Empfohlene Bibliothek von Django

Freitag I / O. Bei Wamuu Co., Ltd. ist jeder Freitag ein Tag, an dem wir an dem arbeiten, woran wir interessiert sind, und die Ergebnisse auf irgendeine Weise ausgeben. Jeder sollte am Freitag machen, was er will!

Einführung

Heutzutage gibt es verschiedene nützliche Sprachen wie Golang, aber wenn Sie eine Webanwendung erstellen möchten, ist dies das stärkste (ich persönlich denke) Python Django. Dieses Mal habe ich versucht, die Bibliotheken zusammenzufassen, die ich beim Erstellen von Webanwendungen mit Django immer verwende.

django-cacheops

https://github.com/Suor/django-cacheops

Es ist eine Bibliothek, die den DB-Zugriff über ORM ohne Berechtigung zwischenspeichert. Es ist sehr praktisch, weil es gut ist, wenn man es nur hineinsteckt und ein wenig einstellt. Darüber hinaus gibt es auch die Mechanismen "Funktionscache" und "Cache anzeigen", sodass es sich gut anfühlt, diese vorerst zu verwenden.

django-choices

https://github.com/bigjason/django-choices

Eine Bibliothek, mit der Sie Modell- und Formularauswahl sauber schreiben können.

#Wie schreibe ich gewöhnliche Entscheidungen
class Person(models.Model):
    # Choices
    PERSON_TYPE = (
        ("C", "Customer"),
        ("E", "Employee"),
        ("G", "Groundhog"),
    )

    # Fields
    name = models.CharField(max_length=32)
    type = models.CharField(max_length=1, choices=PERSON_TYPE)
# django-Bei der Verwendung von Auswahlmöglichkeiten
from djchoices import DjangoChoices, ChoiceItem

class Person(models.Model):
    # Choices
    class PersonType(DjangoChoices):
        customer = ChoiceItem("C")
        employee = ChoiceItem("E")
        groundhog = ChoiceItem("G")

    # Fields
    name = models.CharField(max_length=32)
    type = models.CharField(max_length=1, choices=PersonType.choices)

Dies ist praktisch, da es auch als Konstante verwendet werden kann.

person = Person.objects.get(1)
if person.type == Person.PersonType.customer:
    pass

django-debug-toolbar

https://github.com/jazzband/django-debug-toolbar

Unnötig zu erwähnen, dass nützliche Funktionen zum Debuggen auf dem Bildschirm angezeigt werden. Ohne das kann ich nicht mehr arbeiten. Setzen Sie es wegen des Hirntodes ein.

Image

django-extensions

https://github.com/django-extensions/django-extensions/

Wie der Name schon sagt, eine Bibliothek, die Django auf verschiedene Arten erweitert. Hinzufügen verschiedener nützlicher Befehle zu manage.py und Automatische Vervollständigungsfunktion zum Verwaltungsbildschirm hinzufügen oder Nützliche Modellfelder vorbereiten .html) Es gibt viel zu tun.

Der folgende Befehl zum Anzeigen der URL-Liste ist praktisch.

./manage.py show_urls

Es gibt auch eine Funktion namens runserver_plus. Wenn Sie diese verwenden, können Sie sie auf dem im Browser angezeigten Fehlerbildschirm debuggen. Wird sein! Um runserver_plus verwenden zu können, benötigen Sie eine Bibliothek namens Werkzeug.

./manage.py runserver_plus 0.0.0.0:8000

runserver-plus.png

django-import-export

https://github.com/django-import-export/django-import-export

Eine Bibliothek, mit der Sie CSV-Dateien usw. über den Verwaltungsbildschirm importieren und exportieren können. Onkel sofort Bitte gib mir eine CSV-Datei! Es ist praktisch, dies einzugeben, da es heißt. Es kann Formate (Excel oder JSON) verarbeiten, die von tablib unterstützt werden.

Image

Wenn Sie es standardmäßig verwenden, wird es unnötig viel Verarbeitung und es wird schwer sein, so dass es ein Front-Miso ist, aber ich denke, dass Sie sich auf den folgenden Artikel beziehen sollten.

Warum Django-Import-Export-Import so langsam ist und was zu tun ist

django-polymorphic

https://github.com/django-polymorphic/django-polymorphic

Eine Bibliothek, die Sie unbedingt einschließen sollten, wenn Sie [Djangos Multi-Table-Vererbung] verwenden (https://docs.djangoproject.com/de/1.11/topics/db/models/#multi-table-inheritance). Die Modellinstanz wird ohne Erlaubnis heruntergestuft.

from polymorphic.models import PolymorphicModel

class Animal(PolymorphicModel):
    name = models.CharField('name', max_length=50)

class Dog(Animal):
    def say(self):
        return '{}:Hund'.format(self.name)

class Cat(Animal):
    def say(self):
        return '{}:Nyan'.format(self.name)

Dog.objects.create(name='Pochi')
Cat.objects.create(name='Tama')

for animal in Animal.objects.all():
    print(animal.say())  #"Wanwan" für Hunde und "Nyan" für Katzen

django-security

https://github.com/sdelements/django-security/

Eine Bibliothek, die viel Middleware für Sicherheitsmaßnahmen enthält. Sie können es selbst schreiben, aber wenn Sie es bereits haben, ist es einfacher zu verwenden.

django-storages

https://github.com/jschneier/django-storages

Es ist eine praktische Bibliothek, die Sie verwenden können, wenn Sie hochgeladene Dateien mit "S3" verwalten möchten. Es ist wichtig, wenn die Webanwendung redundant konfiguriert ist.

django-widget-tweaks

https://github.com/jazzband/django-widget-tweaks

Ich denke, es gibt Zeiten, in denen Sie beim Rendern eines Django-Formulars eine `Klasse hinzufügen möchten, aber das ist ziemlich ärgerlich, nicht wahr? Sie sollten auf jeden Fall "Django-Widget-Tweaks" verwenden, da es präzise geschrieben werden kann.

So ist es im Django-Standard geschrieben. .. ..

# forms.py
class LoginForm(forms.Form):
    username = forms.CharField(
        'Nutzername',
        max_length=100,
        widget=forms.TextInput(attrs={'class': 'input-username'})
    )
    password = forms.CharField(
        'Passwort',
        max_length=100,
        widget=forms.PasswordInput(attrs={'class': 'input-password'})
    )

---

<!-- login.html -->
<form>
    {{ form.username }}
    {{ form.passowrd }}
    <button type="submit">Login</button>
</form>

Dies ist, was passiert, wenn Sie "Django-Widget-Tweaks" verwenden.

# forms.py
class LoginForm(forms.Form):
    username = forms.CharField('Nutzername', max_length=100)
    password = forms.CharField('Passwort', max_length=100)

---

<!-- login.html -->
{% load widget_tweaks %}
<form>
    {% render_field form.username class="input-username" %}
    {% render_field form.passowrd class="input-password" type="password" %}
    <button type="submit">Login</button>
</form>

Es ist schön, weil Sie in der Atmosphäre des Schreibens von HTML schreiben können.

django-betterforms

https://github.com/fusionbox/django-betterforms

Es ist eine Bibliothek, mit der Sie Formulare erstellen können, die den juckenden Ort erreichen können. Besonders praktisch ist MultiForm, mit dem Sie mehrere Formulare als ein Formular verwenden können.

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'password')


class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('first_name', 'last_name')


class UserProfileMultiForm(MultiModelForm):
    form_classes = {
        'user': UserForm,
        'profile': ProfileForm,
    }

class UserSignupView(CreateView):
    form_class = UserProfileMultiForm
    success_url = reverse_lazy('home')

    def form_valid(self, form):
        user = form['user'].save()
        profile = form['profile'].save(commit=False)
        profile.user = user
        profile.save()
        return redirect(self.get_success_url())

djangorestframework

Es ist eine sehr praktische Bibliothek, die Sie verwenden können, wenn Sie mit Django einen "Rest API Server" erstellen möchten. Es ist eine riesige Bibliothek, die ich nicht leugnen kann, dass es sich um eine Bibliothek oder ein anderes Framework handelt. Da es riesig und schwer zu erklären ist, bezog ich mich auf den Eintrag eines großen Vorfahren.

API mit explosiver Geschwindigkeit mithilfe des Django REST Framework implementieren

FactoryBoy

https://github.com/FactoryBoy/factory_boy

Dies ist sehr nützlich, wenn Sie die zum Testen erforderlichen Modelldaten erstellen! Sie können auch zusammen verwandte Daten erstellen, sodass Sie die Daten beim Schreiben eines Tests nicht vorbereiten müssen.

class ProfileFactory(DjangoModelFactory):
    user = factory.SubFactory('app.users.factories.UserFactory')
    name = Faker('name')
    name_kana = Faker('kana_name')

    class Meta:
        model = Profile
        django_get_or_create = ('user',)


class UserFactory(DjangoModelFactory):
    email = Faker('email')
    password = factory.PostGenerationMethodCall('set_password', 'hogehoge')
    profile = factory.RelatedFactory(ProfileFactory, 'user')

    class Meta:
        model = User
        django_get_or_create = ('email',)


user = UserFactory()
assert user.profile.name is not None

dateutil

https://github.com/dateutil/dateutil/

Django ist eine Python-Bibliothek, aber ich werde sie schreiben, weil es praktisch ist. Wie der Name schon sagt, handelt es sich um eine Bibliothek, die ein "Dienstprogramm zum Bearbeiten von Datum und Uhrzeit" bietet. relativedelta, eine erweiterte Version von timedelta .html) ist sowieso praktisch. Sie können nur "timedelta" bis zu "n Tagen" angeben, aber mit "relativedelta" können Sie "n Monate" angeben.

assert datetime(2000, 1, 1) + relativedelta(months=1) == datetime(2000, 2, 1)
datetime(2000, 1, 31) + relativedelta(months=1) == datetime(2000, 2, 29)

Auch parser, das das Standardformat für Datum und Uhrzeit automatisch analysiert, ist nützlich.

assert parse('2000-10-15') == datetime(2000, 10, 15)

Raven (Sentry)

https://docs.sentry.io/clients/python/integrations/django/

Die Bibliothek ist ein "Fehlerverfolgungsdienst-Client", aber ich werde sie vorstellen, weil sie sehr praktisch ist. Es erkennt Ausnahmen, die in der Web-App ausgelöst werden, und sendet Benachrichtigungen an E-Mails und Slack. Wenn Sie sicherstellen, dass Sie benachrichtigt werden, wenn ein Fehler in der Produktionsumgebung auftritt, können Sie sich einschleichen, bevor die Onkel wütend werden. Sie können die Details des Fehlers auch auf dem Sentry-Verwaltungsbildschirm überprüfen, sodass Sie sich nicht die Mühe machen müssen, die Protokolldatei zu durchsuchen. Die Geschwindigkeit, mit der Fehler behoben werden, wird sich dramatisch verbessern. Verwenden Sie sie daher bitte.

Zusammenfassung

Es gibt viele andere Bibliotheken in Django, daher denke ich, dass es Spaß macht, nach ihnen zu suchen. Awesome Django hat eine große Anzahl von Bibliotheken, daher ist es eine gute Idee, einen Blick darauf zu werfen.

Ich bin froh, wenn Sie mir sagen können "Ich hatte eine nützliche Bibliothek" oder "Ich habe es gemacht, weil ich es nicht habe".

Recommended Posts

Empfohlene Bibliothek von Django
Djangos ImageField