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
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.
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/).
$ pip install django_boost
Mit pip eintreten.
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
]
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.
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 %}
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.
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.
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.
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
...
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
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