PCv5/account/views.py

93 lines
2.9 KiB
Python

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.contrib.auth import login as a_login, logout as a_logout
from account.forms import *
from django.core.urlresolvers import reverse
from django.core.validators import validate_email
from django.conf import settings as s
from django.http import JsonResponse
from home.views import homepage
from django.http import HttpResponseNotFound
def login(request):
"""
Login validation
Only accessible with ajax POST from menu and return json
"""
form = LoginForm()
if request.method == "POST":
if form.is_valid():
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
user = authenticate(username=username, password=password)
if user:
a_login(request, user)
data = {
'login':True
}
return JsonResponse(data)
else:
data = {
'login':False,
'error':'Mauvais identifiant ou mot de passe'
}
return JsonResponse(data)
return HttpResponseNotFound()
def logout(request):
"""
Logout user
with ajax POST from menu and reload page
"""
a_logout(request)
return redirect(reverse(homepage))
def signup(request):
"""
Signup user
with ajax POST from signup page and return json
"""
error = False
form = InscriptionForm()
if request.method == "POST":
if form.is_valid():
password1 = form.cleaned_data["password1"]
password2 = form.cleaned_data["password2"]
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
cgu = form.cleaned_data["cgu"]
if(
s.USERNAME_MAX_LENGTH < username.length < s.USERNAME_MIN_LENGTH or
s.PASSWORD_MAX_LENGTH < password.length < s.PASSWORD_MIN_LENGTH or
password1 != password2 or cgu is False
):
data = {
signed:False,
error:"Désolé ! Nous ne sommes pas assez bête pour ne pas faire de verification server side !"
}
return JsonResponse(data)
try:
validate_email(email)
except forms.ValidationError:
data = {
signed:False,
error:"Mauvais format d'e-mail"
}
return JsonResponse(data)
create_user(username, email, password1)
authenticate(username, password1)
data = {
signed:True
}
return JsonResponse(data)
return render(request, 'signup.html', locals())
def account(request):
return render(request, 'account.html')