[PYTHON] Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist

Im letzten April von Heisei (27. April 2019) veröffentlichte Django eine Bibliothek, die vielleicht ein wenig nützlich ist, und neulich überschritt sie 10.000 DL, daher möchte ich einen Artikel schreiben.

Django-Boost

GitHub https://github.com/ChanTsune/django-boost

Warum hast du es überhaupt geschafft?

Bei INIAD hatte ich die Gelegenheit, das Python-Webanwendungs-Framework Django in der Vorlesung zu lernen, und entschied mich, das damals verwendete Django nützlich zu machen.

Was kann ich tun?

Es ist etwas einfacher, wenn Sie mit Django entwickeln. Speziell,

Es gibt viele andere kleine Funktionen, aber ich werde sie diesmal weglassen, weil sie detailliert und nüchtern sind. Weitere Informationen finden Sie in der Dokumentation (https://django-boost.readthedocs.io/).

Einführung

$ pip install django_boost

Mit pip eintreten.

Aufbau

Fügen Sie Einstellungen hinzu, um django_boost in Ihrem Django-Projekt zu aktivieren.

settings.py




INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_boost', #Nachtrag
]

Einführung für jede Funktion

Benutzer, der sich mit einer E-Mail-Adresse anmeldet

Fügen Sie der Einstellungsdatei den folgenden Inhalt hinzu.

settings.py


AUTH_USER_MODEL = 'django_boost.EmailUser'

Ersetzen Sie das Standard-Django-Benutzermodell durch einen Benutzer, der sich mit einer E-Mail-Adresse anstelle eines Benutzernamens anmeldet. Es hat die gleichen Felder wie das Standard-Django-Benutzermodell.

Verwenden Sie in Django integrierte Python-Funktionen

Durch Hinzufügen der folgenden Beschreibung zur Vorlagendatei können die in Python integrierten Funktionen als Filter und Tags in der Django-Vorlage verwendet werden.

template.html


{% load boost %}

Liste der integrierten Funktionen von Python https://docs.python.org/ja/3/library/functions.html

Persönlich verwende ich oft die Funktion "Format", wenn ich Zeichenfolgen formatiere.

{% load boost %}

{{ value|format:"," }} {#Zeigen Sie die Zahlen alle 3 durch Kommas getrennten Ziffern an#}

zip ist auch ganz praktisch. Während der Entwicklung ist es meiner Meinung nach praktisch, eine Liste von Variablentypen und -attributen in der Vorlage anzuzeigen, z. B. "Typ" und "Verzeichnis".

Obwohl es sich nicht um eine integrierte Funktion handelt, gibt es auch Tags, mit denen Sie Objekte aus Zeichenfolgenliteralen erstellen können.

Im folgenden Beispiel wird eine Liste erstellt.

template.html


{%load boost %}

{% literal "[1,2,3]" as lst %}

{% for i in lst %}
  <p>{{ i }}</p>
{% endfor %}

Schreiben Sie die URL-Definition einfach zu lesen

Wenn Sie mehrere Modelle für eine Anwendung erstellen, werden die "URL-Muster" schwerer zu erkennen. Es kann jedoch verwendet werden, wenn das Teilen der Datei schwierig ist.

urls.py


from django_boost.urls import UrlSet

class YourModelUrlSet(UrlSet):
    app_name = "YourModel"
    urlpatterns = [
        path('xxx/', ..., name="XXX")
        path('yyy/', ..., name="YYY")
        path('zzz/', ..., name="ZZZ")
    ]

urlpatterns = [
    path('path/to/model/', include(YourModelUrlSet))
]

Es ist einfacher zu erkennen, ob Sie es durch die CRUD-Ansicht jedes Modells teilen. Ich denke, es ist auch praktisch, den Namespace für jedes Modell trennen zu können.

Wirf eine andere Ausnahme als Http404 aus

Ich denke, es ist eine gute Idee, einen 404 auszugeben, wenn Sie die Anforderungen an die Anzeigeberechtigung nicht erfüllen. Andere Ausnahmen können ebenfalls ausgelöst werden.

Um es zu verwenden, müssen Sie der Einstellungsdatei ein wenig hinzufügen.

settings.py


MIDDLEWARE = [
    'django_boost.middleware.HttpStatusCodeExceptionMiddleware',  #Nachtrag
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Ich habe eine Middleware hinzugefügt.

In diesem Zustand wird der Statuscode zurückgegeben, wenn Sie während des Ansichtsprozesses eine Ausnahme auslösen. Im folgenden Beispiel wird eine "Http302" -Ausnahme ausgelöst, um umzuleiten.

views.py


from django.shortcuts import render
from django_boost.http.response import Http302

def my_view(request):
  if request.user.email == "":
     raise Http302("/register/email/")
  return render(request, "mypage.html")

Zusätzlich zu 302 werden die meisten Statuscodes abgedeckt.

Wenn Sie eine benutzerdefinierte Vorlage verwenden möchten, platzieren Sie [Statuscode] .html direkt unter dem Vorlagenverzeichnis und es wird verwendet.

Seite, die in regelmäßigen Abständen eine erneute Authentifizierung anfordert

Wenn Sie eine Ansicht auf Klassenbasis erstellen, können Sie eine Seite erstellen, die in regelmäßigen Abständen authentifiziert werden muss, indem Sie die Mix-In-Klasse wie unten gezeigt erben.

view.py


from datetime import timedelta
from django_boost.views.mixins import ReAuthenticationRequiredMixin

class MyView(ReAuthenticationRequiredMixin,TemplateView):
    template_name = '...'
    auth_unnecessary = timedelta(hours=1)

Klassenvariable auth_unnecessary Durch Festlegen des erneuten Authentifizierungsintervalls wird eine erneute Authentifizierung angefordert, wenn ein Zeitraum länger als das festgelegte Intervall ab der letzten Anmeldezeit ist.

Für "auth_unnecessary" können Sie die Anzahl der Sekunden mit "int" oder mit "timedelta" angeben.

Berühren Sie die Informationen des angemeldeten Benutzers in der Formularklasse

Bei der Validierung eines Formulars möchten Sie häufig die Validierungsbedingungen für jeden Benutzer ändern.

In einem solchen Fall können Sie durch Erben der folgenden Mix-In-Klassen an die Form-Klasse bzw. die View-Klasse die Benutzerinformationen mit "self.user" aus der Formularklasse heraus berühren.

forms.py


from django import forms
from django_boost.forms.mixins import FormUserKwargsMixin

class MyForm(FormUserKwargsMixin,Form):
   email = forms.EmailField()

   def email_clean(self):
      if self.user.email: #E-Mail-Adresse des angemeldeten Benutzers
          ...
      ...

views.py


form django_boost.views.mixins import ViewUserKwargsMixin
from .forms import MyForm

class MyView(ViewUserKwargsMixin,FormView):
   form_class = MyForm
   ...

Es ist etwas einfacher, Ihre Anwendung für Heroku bereitzustellen

Mit dem Befehl können Sie automatisch die Einstellungsdatei generieren, die für die Bereitstellung der Django-Anwendung auf [heroku] erforderlich ist (https://jp.heroku.com/).

$ python manage.py support_heroku
Generated : /Users/username/project/Procfile
Generated : /Users/username/project/runtime.txt
Generated : /Users/username/project/requirements.txt

Procfile, runtime.txt, require.txt werden automatisch generiert.

Wenn eine Datei mit demselben Namen vorhanden ist, wird sie nicht generiert. Wenn Sie sie also überschreiben und generieren möchten, fügen Sie die Option "--overwrite" hinzu.

$ python manage.py support_heroku --overwrite

Schließlich

Wie eingangs erwähnt, gibt es viele andere kleine und nüchterne Funktionen. Wenn Sie also interessiert sind, lesen Sie bitte Dokumentation. Bitte gib mir.

Entwickler werden sich freuen, die Sterne zu erhalten! https://github.com/ChanTsune/django-boost

Recommended Posts

Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Eine Sammlung von Ressourcen, die zum Erstellen und Erweitern von Punktedateien hilfreich sein können
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
4 Boxen, die für Pepper-Hacker nützlich sein könnten
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Die Geschichte des Exportierens eines Programms
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können
Eine kleine süchtig machende Geschichte mit den Berechtigungen des von expdp angegebenen Verzeichnisses (für Anfänger)
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
Ein Hinweis zu den Funktionen der Standard-Linux-Bibliothek, die sich mit Zeit befasst
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte der Verwendung von mysqlclient, da PyMySQL nicht mit Django 2.2 verwendet werden kann
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Die Geschichte der Erstellung von Botonyan, das den Inhalt von Google Text & Tabellen als Antwort auf ein bestimmtes Keyword in Slack zurückgibt
Die Geschichte der Schaffung einer (wahrscheinlich) minimalen Fertigkeit, die Personalisierung und Abrechnung von Fertigkeiten implementiert
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Eine Geschichte, die die Leistung verbessern könnte, indem nur der Typ von numpy geändert wird
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
DJango Memo: Von Anfang an (Erstellen einer Ansicht)
Django REST Framework Ein wenig nützlich zu wissen.
Die Geschichte der Anzeige von Mediendateien in Django
Die Geschichte eines Mel-Icon-Generators
Ein regulärer Ausdruck, der eine Teilzeichenfolge mit N oder mehr aufeinander folgenden Zeichen findet
Artikel, der Ihnen hilft, den Kollisionsalgorithmus für starre Kugeln ein wenig zu verstehen
[Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!
Die Geschichte des Starts eines Minecraft-Servers von Discord
[Python] Ein Programm, das die Anzahl der Täler zählt
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --a
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
DJango Hinweis: Von Anfang an (Erstellen einer Ansicht aus einer Vorlage)
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Die Geschichte, dass der Rückgabewert von tape.gradient () None war
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Die Geschichte, die Japan ausgab, wurde mit Django verwechselt
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Die Geschichte der Schaffung eines "Geist- und Zeit-Chatrooms" exklusiv für Ingenieure im Unternehmen
Eine Bibliothek, die Leben und Tod anderer Maschinen durch Ping von Python aus überwacht
Eine Geschichte, die das Debuggen von Modellen in der Django + SQLAlchemy-Umgebung einfacher macht
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Die Geschichte von sys.path.append ()
Ein Werkzeug, das die Gacha von Soshage automatisch dreht
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --- b