[PYTHON] Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Traitement d'authentification)

Cela fait un moment depuis le post précédent, mais je vais continuer.

En fait, le travail lui-même s'est déroulé assez librement et il semble que je ne faisais pas que poster, alors à partir de ce moment, prenons un petit nombre d'entre eux.

Tout d'abord, à la légère, du traitement du système d'authentification. Mis en œuvre en faisant référence à Past Posts I Made.

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('/')  #Si vous êtes authentifié, redirigez vers la première page (je n'y toucherai pas cette fois)

	error_msg = ""  #Définissez un message d'erreur et amenez-le dans le modèle

	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/')  #Après vous être déconnecté, revenez à l'écran de connexion


def new_owner(req):  #Une page pour créer un nouvel utilisateur. Je suis le propriétaire de l'équipe

	error_msg = ""

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

		if password != posted['pass_check']:  #Vérifiez votre mot de passe en tapant deux fois comme c'est souvent le cas
			error_msg = "Password check is failed!"
		else:
			if len(password) < 6:  #Le mot de passe doit être au moins de 6 caractères
				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:  #Si le nom d'utilisateur est déjà utilisé, cette erreur sera générée, alors prenez des mesures
					error_msg = "You can not use this name!"

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


@login_required  #Décorateur pratique pour se connecter (LOGIN dans les paramètres)_Il est nécessaire de définir l'URL. Tout ce que vous avez à faire est de mettre votre page de connexion à cette URL)
def edit_groupschedule(req):  #On a l'impression de décider du paramètre de décalage, il peut donc être plus facile de comprendre s'il est défini comme paramètre de décalage
	from django.contrib.auth.models import Group
	from owner.models import GroupSchedule
	
	try:  #Si l'utilisateur accédant n'a pas encore de programme de groupe, créez-en un nouveau, s'il en a déjà un, modifiez-le.
		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('/')  #Aller en haut après l'enregistrement

	return render(req,'owner/edit_groupschedule.html',{
		'group_name':group.name,
		'start_point':groupschedule.start_point,
		'select_choices':(1,5,10,15,20,25,),  #Candidats aux dates de début des équipes mensuelles
	})

Vient ensuite le modèle. J'utilise Bootstrap, mais c'est un peu ennuyeux d'écrire <div> '' chaque fois que je crée une partie de formulaire, donc les parties qui sont susceptibles d'être utilisées à plusieurs reprises sont ** templates / app ** Créez un répertoire appelé ** parts ** ci-dessous. Après cela, vous pouvez le récupérer en utilisant la balise de modèle ** include **. L'image qui ** étend est-elle le fondement et inclut-elle la partie **?

Par exemple, comme ça.

parts/input.html

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

Le reste doit être fait de manière appropriée. Puisque vous pouvez saisir une valeur dans chaque variable lors de la lecture d'une pièce, vous pouvez également ajouter des classes. De plus, puisque j'ai fait une partie de l'application basée sur cela, je vais l'utiliser.

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>  <!--Affichage des messages en cas d'erreur-->
	{% 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!' %}  {#Vous pouvez mettre une valeur dans une variable avec avec#}
	<a href="/owner/new">Create New User</a>
{% endblock form %}

Le reste est presque le même.

..../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 %}  {#valeur initiale. vues.Sentiment de passer les variables apportées de py aux pièces#}
	{% include 'owner/parts/select_number.html' with start_point=start_point select_choices=select_choices %}  {#Candidats à la sélection#}
	{% include 'owner/parts/submit.html' with value='Create your Schedule!' %}
{% endblock form %}

Peu importe si cela n'a pas d'importance, mais quand j'ai laissé un blanc, j'ai réalisé à quel point il était difficile de comprendre mon code (certaines classes et noms de fonctions n'ont pas de sens). C'est embarrassant, donc je n'ai pas tellement envie de poster, et si je pense "OK" et que je continue tout seul, ça deviendra de plus en plus compliqué. Je posterai jusqu'au point où je l'ai fait pour le moment, mais je pense qu'il vaudrait mieux le recréer à partir de zéro.

Recommended Posts

Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Traitement d'authentification)
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Page de création de décalage)
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Introduction)
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Ecrire un modèle de base)
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Expérience sur la page d'administration)
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Conception du modèle de base de données)
Créer une application Todo avec Django ③ Créer une page de liste de tâches
Créez une application Web simple avec Flask
Créer une application Todo avec Django ④ Implémenter la fonction de création de dossier et de tâche
Créer une application Todo avec Django REST Framework + Angular
Essayez de créer une application Todo avec le framework Django REST
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
Créer une page d'accueil avec django
Créer une application Web avec Django
Créez une API Web capable de fournir des images avec Django
Créer une application Todo avec Django ① Créer un environnement avec Docker
Créer une application Web avec Django
Créer un téléchargeur de fichiers avec Django
Créez une application Web qui peut être facilement visualisée avec Plotly Dash
"Classification des déchets par image!" Journal de création d'application jour3 ~ Application Web avec Django ~
Jouez comme une application Web avec ipywidgets
Créer une application graphique avec Tkinter de Python
Démonisez une application Web Python avec Supervisor
Créez un système stellaire avec le script Blender 2.80
Développement d'une application WEB avec Django [Traitement des requêtes]
Création de la première application avec Django startproject
Créer un service Web avec Docker + Flask
J'ai fait une application WEB avec Django
Essayez de créer une application Web avec Vue.js et Django (édition Mac) - (1) Construction d'environnement, création d'application
Tutoriel Django (Créer une application de blog) ① --Préparation, Création de la première page
Comment développer une application de panier avec Django
Développement d'une application WEB avec Django [Création de l'écran d'administration]
Créer un fichier PDF avec une taille de page aléatoire
Créer une page qui se charge indéfiniment avec python
[Python] Créer un environnement de développement Django avec Docker
Créez un tableau de bord pour les appareils réseau avec Django!
Créer un environnement de développement Django à l'aide de Doker Toolbox
Créer une nouvelle page en confluence avec Python
Procédure de création d'application multi-plateforme avec kivy
Créez une application Hello World avec un seul fichier avec django
Jusqu'à ce que vous créiez une nouvelle application dans Django
Extraire des données d'une page Web avec Python
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
Retour sur la création d'un service Web avec Django 1
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django --startapp
Créez une application graphique native avec Py2app et Tkinter
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Créez un environnement de développement python avec vagrant + ansible + fabric
Retour sur la création d'un service Web avec Django 2
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django - startproject
Déployer l'application Django créée avec PTVS sur Azure
À moi-même en tant que débutant Django (1) -Création d'un projet / application-
À moi-même en tant que débutant Django (4) --Créer une application mémo-
Créez un environnement de développement avec Poetry Django Docker Pycharm
Déployez des applications Web en temps réel avec Swampdragon x Apache
Articles permettant le développement de systèmes avec Django (Python) _Introduction
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Déployer une application Web créée avec Streamlit sur Heroku