[PYTHON] Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)

Es ist schon eine Weile her seit vorheriger Beitrag, aber ich werde fortfahren.

Eigentlich ist die Arbeit selbst ziemlich frei verlaufen und es scheint, dass ich nicht nur gepostet habe, also nehmen wir von diesem Zeitpunkt an eine kleine Menge davon.

Zunächst einmal leicht von der Verarbeitung des Authentifizierungssystems. Implementiert unter Bezugnahme auf Frühere Beiträge, die ich erstellt habe.

owner/views.py

from django.shortcuts import render,redirect
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required


def log_in(req):

	if req.user.is_authenticated():
		return redirect('/')  #Wenn Sie authentifiziert sind, leiten Sie zur obersten Seite weiter (diesmal werde ich nicht berühren).

	error_msg = ""  #Definieren Sie eine Fehlermeldung und bringen Sie sie zur Vorlage

	if req.method == 'POST':
		posted = req.POST
		name,password = posted['name'],posted['password']

		user = authenticate(username=name,password=password)

		if user is not None:
			if user.is_active:
				login(req,user)

				return redirect('/')
			else:
				error_msg = "This account is not active..."
		else:
			error_msg = "Log in failed...."
				
	return render(req,'owner/log_in.html',{'error_msg':error_msg}) 


def log_out(req):
	logout(req)

	return redirect('/login/')  #Kehren Sie nach dem Abmelden zum Anmeldebildschirm zurück


def new_owner(req):  #Eine Seite zum Erstellen eines neuen Benutzers. Ich bin der Besitzer der Schicht

	error_msg = ""

	if req.method == 'POST':
		posted = req.POST
		name,password = posted['name'],posted['password']

		if password != posted['pass_check']:  #Überprüfen Sie Ihr Passwort, indem Sie zweimal eingeben, wie dies häufig der Fall ist
			error_msg = "Password check is failed!"
		else:
			if len(password) < 6:  #Das Passwort muss mindestens aus 6 Zeichen bestehen
				error_msg = "Password need over 6 letters!"
			else:
				from django.db import IntegrityError
				from django.contrib.auth.models import User
				try:
					owner = User.objects.create_user(username=name,password=password)
					return redirect('/')
				except IntegrityError:  #Wenn der Benutzername bereits verwendet wird, wird dieser Fehler ausgelöst. Ergreifen Sie daher Maßnahmen
					error_msg = "You can not use this name!"

	return render(req,'owner/new_owner.html',{'error_msg':error_msg,})


@login_required  #Praktischer Dekorateur zum Anmelden (ANMELDEN in den Einstellungen)_Es ist notwendig, die URL festzulegen. Alles was Sie tun müssen, ist Ihre Anmeldeseite unter dieser URL zu platzieren.
def edit_groupschedule(req):  #Es fühlt sich an, als würde man die Schichteinstellung festlegen, daher ist es möglicherweise einfacher zu verstehen, ob sie als Schichteinstellung eingestellt ist
	from django.contrib.auth.models import Group
	from owner.models import GroupSchedule
	
	try:  #Wenn der Benutzer, auf den zugegriffen wird, noch keinen Gruppenzeitplan hat, erstellen Sie einen neuen. Wenn er bereits einen hat, bearbeiten Sie ihn.
		groupschedule = GroupSchedule.objects.get(owner=req.user)
		group = groupschedule.group
	except GroupSchedule.DoesNotExist:
		groupschedule = GroupSchedule(owner=req.user)
		group = Group()

	if req.method == 'POST':
		posted = req.POST

		group.name = posted['name']
		group.save()

		groupschedule.group = group
		groupschedule.start_point = int(posted['start_point'])
		groupschedule.save()

		return redirect('/')  #Nach dem Speichern nach oben springen

	return render(req,'owner/edit_groupschedule.html',{
		'group_name':group.name,
		'start_point':groupschedule.start_point,
		'select_choices':(1,5,10,15,20,25,),  #Kandidaten für monatliche Schichtstartdaten
	})

Als nächstes kommt die Vorlage. Ich verwende Bootstrap, aber es ist etwas ärgerlich, jedes Mal, wenn ich ein Formularteil erstelle, `` <div> `zu schreiben. Die Teile, die wahrscheinlich wiederholt verwendet werden, sind ** Vorlagen / App ** Erstellen Sie unten ein Verzeichnis mit dem Namen ** Teile **. Danach können Sie es mit dem Template-Tag ** include ** abrufen. Ist das Bild, das ** erweitert, das Fundament und das Teil **?

Zum Beispiel so.

parts/input.html

<div class="form-group">
	<label>{{ label }}
		<input type="{{ type }}" name="{{ name }}" class="form-control {{ class }}" value="{{ value }}">
	</label>
</div>

Der Rest sollte angemessen gemacht werden. Da Sie beim Lesen eines Teils in jede Variable einen Wert eingeben können, können Sie auch Klassen hinzufügen. Da ich auf dieser Grundlage einen Teil für die Anwendung erstellt habe, werde ich ihn außerdem verwenden.

templates/owner/log_in.html

{% extends 'bases/base_form.html' %}

{% block title %}Log in{% endblock %}

{% block form %}
<h1>Log in<small>{{ error_msg }}</small></h1>  <!--Meldungsanzeige bei Fehler-->
	{% include 'owner/parts/name_input.html' %}
	{% include 'owner/parts/pass_input.html' %}

	{% include 'parts/submit.html' with class='btn-lg btn-primary' value='Log in!' %}  {#Sie können mit with einen Wert in eine Variable einfügen#}
	<a href="/owner/new">Create New User</a>
{% endblock form %}

Der Rest ist fast der gleiche.

..../new_user.html

{% extends 'owner/bases/base_form.html' %}

{% block title %}new Owner!{% endblock %}

{% block form %}
<h1>new Owner!<small>{{ error_msg }}</small></h1>
	{% include 'owner/parts/name_input.html' %}
	{% include 'owner/parts/pass_input.html' %}
	{% include 'owner/parts/pass_input2.html' %}

	{% include 'parts/submit.html' with value="Create new owner!" %}
{% endblock form %}

..../edit_groupschedule.html

{% extends 'owner/bases/base_form.html' %}

{% block title %}new Schedule!{% endblock %}

{% block form %}
	{% include 'owner/parts/name_input.html' with value=group_name %}  {#Ursprünglicher Wert. Ansichten.Das Gefühl, die von py mitgebrachten Variablen an die Teile weiterzugeben#}
	{% include 'owner/parts/select_number.html' with start_point=start_point select_choices=select_choices %}  {#Kandidaten zur Auswahl#}
	{% include 'owner/parts/submit.html' with value='Create your Schedule!' %}
{% endblock form %}

Es spielt keine Rolle, ob es keine Rolle spielt, aber als ich ein Leerzeichen ließ, wurde mir klar, wie schwierig es war, meinen Code zu verstehen (einige Klassen- und Funktionsnamen sind nicht sinnvoll). Es ist peinlich, also habe ich nicht so viel Lust zu posten, und wenn ich "OK" denke und alleine weitermache, wird es immer chaotischer. Ich werde bis zu dem Punkt posten, an dem ich es vorerst getan habe, aber ich denke, es wäre besser, es von Grund auf neu zu erstellen.

Recommended Posts

Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schreiben Sie eine Basisvorlage)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Entwurf des Datenbankmodells)
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Homepage mit Django
Erstellen Sie eine Webanwendung mit Django
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen Sie eine Webanwendung mit Django
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
"Klassifizierung von Müll nach Bild!" App-Erstellungstagebuch Tag3 ~ Webanwendung mit Django ~
Spielen Sie wie eine Web-App mit ipywidgets
Erstellen Sie eine GUI-App mit Tkinter of Python
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
Entwicklung einer WEB-Anwendung mit Django [Request Processing]
Erstellen der ersten App mit Django Startprojekt
Erstellen Sie einen Webdienst mit Docker + Flask
Ich habe eine WEB-Bewerbung bei Django gemacht
Versuchen Sie, eine Webanwendung mit Vue.js und Django (Mac Edition) zu erstellen - (1) Umgebungskonstruktion, Anwendungserstellung
Django Tutorial (Blog App erstellen) ① - Vorbereitung, Erstellung der obersten Seite
So entwickeln Sie eine Cart-App mit Django
Entwicklung einer WEB-Anwendung mit Django [Erstellung des Admin-Bildschirms]
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Bis Sie eine neue App in Django erstellen
Extrahieren Sie mit Python Daten von einer Webseite
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Was ist ein Hund? Startvolumen der Django-App erstellen --startapp
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Was ist ein Hund? Django App Creation Start Volume - Startprojekt
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Für mich als Django-Anfänger (1) -Erstellen eines Projekts / einer App-
Für mich als Django-Anfänger (4) - Erstellen Sie eine Memo-App-
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Artikel, die die Systementwicklung mit Django (Python) ermöglichen _Einführung
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit