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