[PYTHON] Bibliothèque recommandée de Django

Vendredi I / O. Chez Wamuu Co., Ltd., chaque vendredi est un jour où nous travaillons sur ce qui nous intéresse et produisons les résultats d'une manière ou d'une autre. Tout le monde devrait faire ce qu'il veut le vendredi!

introduction

De nos jours, il existe divers langages utiles tels que Golang, mais si vous voulez créer une application Web, c'est le Python Django le plus puissant (je pense personnellement). Cette fois, j'ai essayé de résumer les bibliothèques que j'utilise toujours lors de la création d'applications Web avec Django.

django-cacheops

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

Il s'agit d'une bibliothèque qui met en cache l'accès à la base de données via ORM sans autorisation. C'est très pratique car ce sera bien simplement en le mettant et en le réglant un peu. De plus, il existe également des mécanismes de «Cache de fonction» et de «Cache de vue», il est donc bon de l'utiliser pour le moment.

django-choices

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

Une bibliothèque qui vous permet d'écrire proprement des choix de modèle et de formulaire.

#Comment écrire des choix ordinaires
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-Lors de l'utilisation de choix
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)

C'est pratique car il peut également être utilisé comme constante.

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

django-debug-toolbar

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

Inutile de dire que celui qui affiche des fonctions utiles pour le débogage à l'écran. Je ne peux plus travailler sans ça. Mettez-le à cause de la mort cérébrale.

Image

django-extensions

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

Comme son nom l'indique, une bibliothèque qui étend django de différentes manières. Ajouter diverses commandes utiles à manage.py et Ajouter une fonction de saisie semi-automatique à l'écran de gestion ou Préparez des champs de modèle utiles .html) Il y a beaucoup de choses à faire.

La commande suivante pour afficher la liste des URL est pratique.

./manage.py show_urls

Il existe également une fonction appelée runserver_plus, mais si vous l'utilisez, vous pouvez déboguer sur l'écran d'erreur affiché sur le navigateur. Sera! Pour utiliser runserver_plus, vous avez besoin d'une bibliothèque appelée 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

Une bibliothèque qui vous permet d'importer et d'exporter des fichiers CSV, etc. à partir de l'écran de gestion. Oncles immédiatement Veuillez me donner un fichier CSV! Il est pratique de le mettre car il s'appelle . Il peut gérer les formats (Excel ou JSON) pris en charge par tablib.

Image

Si vous l'utilisez par défaut, ce sera beaucoup de gaspillage et ce sera lourd, donc c'est un miso avant, mais je pense que vous devriez vous référer à l'article suivant.

Pourquoi l'importation de django-import-export est lente et que faire

django-polymorphic

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

Une bibliothèque que vous devez absolument inclure lors de l'utilisation de l'héritage multi-table de Django. Il abattra l'instance de modèle sans autorisation.

from polymorphic.models import PolymorphicModel

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

class Dog(Animal):
    def say(self):
        return '{}:Chienchien'.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" pour les chiens et "Nyan" pour les chats

django-security

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

Une bibliothèque pleine de middleware pour les mesures de sécurité. Vous pouvez l'écrire vous-même, mais si vous l'avez déjà, c'est plus facile à utiliser.

django-storages

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

C'est une bibliothèque pratique à utiliser lorsque vous souhaitez gérer les fichiers téléchargés avec S3. Il est essentiel si l'application Web a une configuration redondante.

django-widget-tweaks

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

Je pense qu'il y a des moments où vous voulez ajouter une classe lors du rendu d'un formulaire Django, mais c'est assez ennuyeux, n'est-ce pas? Vous devriez certainement utiliser django-widget-tweaks car il peut être écrit de manière concise.

C'est ainsi que cela est écrit dans le standard Django. .. ..

# forms.py
class LoginForm(forms.Form):
    username = forms.CharField(
        'Nom d'utilisateur',
        max_length=100,
        widget=forms.TextInput(attrs={'class': 'input-username'})
    )
    password = forms.CharField(
        'mot de passe',
        max_length=100,
        widget=forms.PasswordInput(attrs={'class': 'input-password'})
    )

---

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

C'est ce qui se passe lorsque vous utilisez django-widget-tweaks.

# forms.py
class LoginForm(forms.Form):
    username = forms.CharField('Nom d'utilisateur', max_length=100)
    password = forms.CharField('mot de passe', 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>

C'est bien car on peut écrire dans l'atmosphère d'écriture HTML.

django-betterforms

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

C'est une bibliothèque qui vous permet de créer des formulaires qui peuvent atteindre l'endroit qui démange. Il est particulièrement pratique d'utiliser MultiForm, qui vous permet d'utiliser plusieurs formulaires comme un seul formulaire.

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

C'est une bibliothèque très pratique à utiliser lorsque vous souhaitez créer un serveur API Rest en utilisant Django. C'est une énorme bibliothèque dont je ne peux pas nier qu'il s'agit d'une bibliothèque ou d'un autre framework. Puisqu'il est énorme et difficile à expliquer, j'ai évoqué l'entrée d'un grand ancêtre.

Implémentez l'API à une vitesse explosive en utilisant Django REST Framework

FactoryBoy

https://github.com/FactoryBoy/factory_boy

C'est très utile lors de la création des données de modèle requises pour les tests! Vous pouvez également créer des données associées ensemble, afin de ne pas avoir à préparer les données lors de l'écriture d'un test.

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 est une bibliothèque Python, mais je vais l'écrire car c'est pratique. Comme son nom l'indique, c'est une bibliothèque qui fournit une «utilité pour manipuler la date et l'heure». relativedelta qui est une version améliorée de timedelta .html) est pratique de toute façon. Vous ne pouvez spécifier timedelta que jusqu'à n jours, mais avec relativedelta vous pouvez spécifier n mois.

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

De plus, parser, qui analyse automatiquement le format standard de la date et de l'heure, est également utile.

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

Raven (Sentry)

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

La bibliothèque est un «client de service de suivi des erreurs», mais je vais la présenter car c'est très pratique. Il détecte les exceptions lancées sur l'application Web et envoie des notifications aux e-mails et à Slack. Si vous vous assurez d'être averti lorsqu'une erreur se produit dans l'environnement de production, vous pouvez vous faufiler avant que les oncles ne se fâchent. Vous pouvez également vérifier les détails de l'erreur sur l'écran de gestion Sentry, afin que vous n'ayez pas à vous soucier de rechercher le fichier journal. La vitesse de traitement des bogues s'améliorera considérablement, veuillez donc l'utiliser.

Résumé

Il existe de nombreuses autres bibliothèques dans Django, donc je pense que c'est amusant de les rechercher. Awesome Django a un grand nombre de bibliothèques, c'est donc une bonne idée d'y jeter un œil.

Je suis content si vous pouvez me dire "j'ai eu une bibliothèque utile" ou "je l'ai fait parce que je ne l'ai pas".

Recommended Posts

Bibliothèque recommandée de Django
ImageField de Django