Cleaner code and better pages
This commit is contained in:
parent
5e58c7b59d
commit
cc47be491c
11 changed files with 657 additions and 458 deletions
|
@ -15,6 +15,10 @@ from django.db.models import Q
|
|||
from avisstage.models import Normalien, Stage, Lieu, AvisLieu, AvisStage
|
||||
from avisstage.forms import StageForm, LieuForm, AvisStageForm, AvisLieuForm, FeedbackForm
|
||||
|
||||
#
|
||||
# LECTURE
|
||||
#
|
||||
|
||||
# Page d'accueil
|
||||
def index(request):
|
||||
return render(request, 'avisstage/index.html')
|
||||
|
@ -25,31 +29,62 @@ def perso(request):
|
|||
return render(request, 'avisstage/perso.html')
|
||||
|
||||
# Profil
|
||||
#login_required
|
||||
class ProfilView(DetailView, LoginRequiredMixin):
|
||||
model = Normalien
|
||||
template_name = 'avisstage/detail/profil.html'
|
||||
|
||||
# Récupération de son propre profil
|
||||
def get_object(self):
|
||||
return Normalien.objects.get(user__username=self.kwargs.get('username'))
|
||||
|
||||
# Stage
|
||||
#login_required
|
||||
class StageView(DetailView, LoginRequiredMixin):
|
||||
model = Stage
|
||||
template_name = 'avisstage/detail/stage.html'
|
||||
|
||||
# Restriction aux stages publics ou personnels
|
||||
def get_queryset(self):
|
||||
filtre = Q(auteur__user_id=self.request.user.id) | Q(public=True)
|
||||
return Stage.objects.filter(filtre)
|
||||
|
||||
# Liste des stages par dernière modification
|
||||
#login_required
|
||||
class StageListe(ListView, LoginRequiredMixin):
|
||||
model = Stage
|
||||
template_name = 'avisstage/liste/stage.html'
|
||||
|
||||
def get_queryset(self):
|
||||
return Stage.objects.filter(public=True).order_by('-date_maj')
|
||||
|
||||
# Recherche
|
||||
@login_required
|
||||
def recherche(request):
|
||||
return render(request, 'avisstage/recherche.html')
|
||||
|
||||
#
|
||||
# EDITION
|
||||
#
|
||||
|
||||
# Profil
|
||||
#login_required
|
||||
class ProfilEdit(UpdateView, LoginRequiredMixin):
|
||||
model = Normalien
|
||||
fields = ['nom', 'promotion', 'mail']
|
||||
template_name = 'avisstage/formulaires/profil.html'
|
||||
|
||||
# Limitation à son propre profil
|
||||
def get_object(self):
|
||||
return self.request.user.profil
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
print kwargs
|
||||
return super(ProfilEdit, self).get_context_data(**kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('avisstage:perso')
|
||||
|
||||
class ProfilView(DetailView, LoginRequiredMixin):
|
||||
model = Normalien
|
||||
template_name = 'avisstage/detail/profil.html'
|
||||
|
||||
def get_object(self):
|
||||
return Normalien.objects.get(user__username=self.kwargs.get('username'))
|
||||
|
||||
# Stages
|
||||
# Stage
|
||||
@login_required
|
||||
def manage_stage(request, pk=None):
|
||||
# Objet de base
|
||||
if pk is None:
|
||||
stage = Stage(auteur=request.user.profil)
|
||||
avis_stage = AvisStage(stage=stage)
|
||||
|
@ -59,15 +94,19 @@ def manage_stage(request, pk=None):
|
|||
avis_stage, _ = AvisStage.objects.get_or_create(stage=stage)
|
||||
c_del = True
|
||||
|
||||
# Formset pour les avis des lieux
|
||||
AvisLieuFormSet = forms.inlineformset_factory(
|
||||
Stage, AvisLieu, form=AvisLieuForm, can_delete=c_del, extra=0)
|
||||
|
||||
if request.method == "POST":
|
||||
# Lecture des données
|
||||
form = StageForm(request.POST, request=request, instance=stage, prefix="stage")
|
||||
avis_stage_form = AvisStageForm(request.POST,
|
||||
instance=avis_stage, prefix="avis")
|
||||
avis_lieu_formset = AvisLieuFormSet(request.POST, instance=stage,
|
||||
prefix="lieux")
|
||||
|
||||
# Validation et enregistrement
|
||||
if (form.is_valid() and
|
||||
avis_stage_form.is_valid() and
|
||||
avis_lieu_formset.is_valid()):
|
||||
|
@ -81,33 +120,20 @@ def manage_stage(request, pk=None):
|
|||
avis_stage_form = AvisStageForm(instance=avis_stage, prefix="avis")
|
||||
avis_lieu_formset = AvisLieuFormSet(instance=stage, prefix="lieux")
|
||||
|
||||
# Affichage du formulaire
|
||||
return render(request, "avisstage/formulaires/stage.html",
|
||||
{'form': form, 'avis_stage_form': avis_stage_form,
|
||||
'avis_lieu_formset': avis_lieu_formset,
|
||||
'creation': pk is None})
|
||||
|
||||
class StageView(DetailView, LoginRequiredMixin):
|
||||
model = Stage
|
||||
template_name = 'avisstage/detail/stage.html'
|
||||
|
||||
def get_queryset(self):
|
||||
filtre = Q(auteur__user_id=self.request.user.id) | Q(public=True)
|
||||
return Stage.objects.filter(filtre)
|
||||
|
||||
class StageListe(ListView, LoginRequiredMixin):
|
||||
model = Stage
|
||||
template_name = 'avisstage/liste/stage.html'
|
||||
|
||||
def get_queryset(self):
|
||||
return Stage.objects.filter(public=True).order_by('-date_maj')
|
||||
|
||||
|
||||
# Lieux des stages
|
||||
# Ajout d'un lieu de stage
|
||||
#login_required
|
||||
class LieuAjout(CreateView, LoginRequiredMixin):
|
||||
model = Lieu
|
||||
form_class = LieuForm
|
||||
template_name = 'avisstage/formulaires/lieu.html'
|
||||
|
||||
# Retourne d'un JSON si requête AJAX
|
||||
def form_valid(self, form):
|
||||
if self.request.GET.get("format", "") == "json":
|
||||
self.object = form.save()
|
||||
|
@ -123,26 +149,31 @@ class LieuAjout(CreateView, LoginRequiredMixin):
|
|||
else:
|
||||
super(LieuAjout, self).form_valid(form)
|
||||
|
||||
# Passage d'un stage en mode public
|
||||
@login_required
|
||||
def publier_stage(request, pk):
|
||||
if request.method != "POST":
|
||||
return HttpResponseForbidden()
|
||||
stage = get_object_or_404(Stage, pk=pk)
|
||||
|
||||
# Stage non possédé par l'utilisateur
|
||||
if stage.auteur != request.user.profil:
|
||||
return HttpResponseForbidden()
|
||||
|
||||
# Mise à jour du statut
|
||||
if "publier" in request.POST:
|
||||
stage.public = True
|
||||
else:
|
||||
stage.public = False
|
||||
|
||||
stage.save()
|
||||
|
||||
return redirect(reverse("avisstage:stage", kwargs={"pk": pk}))
|
||||
|
||||
@login_required
|
||||
def recherche(request):
|
||||
return render(request, 'avisstage/recherche.html')
|
||||
|
||||
|
||||
#
|
||||
# FEEDBACK
|
||||
#
|
||||
|
||||
@login_required
|
||||
def feedback(request):
|
||||
if request.method == "POST":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue