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!
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.
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
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.
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.
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".