Habia trabajado un buen poco pero como vi que tenia que separar los repositorios perdi bastante la historia :c
103 lines
3.2 KiB
Python
103 lines
3.2 KiB
Python
from django.http import HttpResponseRedirect, HttpResponseNotAllowed
|
|
from django.shortcuts import render
|
|
from django.utils.http import url_has_allowed_host_and_scheme
|
|
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout, get_user_model
|
|
|
|
|
|
def get_next_url(request):
|
|
next_url = request.POST.get('next', request.GET.get('next', ''))
|
|
|
|
url_is_safe = url_has_allowed_host_and_scheme(
|
|
url=next_url,
|
|
allowed_hosts=request.get_host(),
|
|
require_https=request.is_secure(),
|
|
)
|
|
|
|
print(next_url if url_is_safe else '/')
|
|
return next_url if url_is_safe else '/'
|
|
|
|
|
|
def login(request):
|
|
if request.method == 'GET':
|
|
return _login_get(request)
|
|
elif request.method == 'POST':
|
|
return _login_post(request)
|
|
else:
|
|
return HttpResponseNotAllowed(permitted_methods=['GET', 'POST'])
|
|
|
|
|
|
def _login_get(request):
|
|
return render(request, template_name='users/login.html', context={'next': get_next_url(request)})
|
|
|
|
|
|
def _login_post(request):
|
|
username = request.POST.get('username', '')
|
|
password = request.POST.get('password', '')
|
|
|
|
user = authenticate(request, username=username, password=password)
|
|
|
|
if user is not None:
|
|
auth_login(request, user)
|
|
return HttpResponseRedirect(get_next_url(request))
|
|
else:
|
|
return render(
|
|
request,
|
|
template_name='users/login.html',
|
|
context={'next': get_next_url(request), 'error': 'Usuario o contraseña son incorrectos'}
|
|
)
|
|
|
|
|
|
def logout(request):
|
|
auth_logout(request)
|
|
return HttpResponseRedirect(get_next_url(request))
|
|
|
|
|
|
def register(request):
|
|
if request.method == 'GET':
|
|
return _register_get(request)
|
|
elif request.method == 'POST':
|
|
return _register_post(request)
|
|
else:
|
|
return HttpResponseNotAllowed(permitted_methods=['GET', 'POST'])
|
|
|
|
|
|
def _register_get(request):
|
|
return render(request, template_name='users/register.html', context={'next': get_next_url(request)})
|
|
|
|
|
|
def _register_post(request):
|
|
username = request.POST.get('username', '')
|
|
password = request.POST.get('password', '')
|
|
password_confirm = request.POST.get('password_confirm', '')
|
|
email = request.POST.get('email', '')
|
|
|
|
old = {
|
|
'username': username,
|
|
'email': email
|
|
}
|
|
|
|
if not username:
|
|
return render(
|
|
request,
|
|
template_name='users/register.html',
|
|
context={'next': get_next_url(request), 'error': 'Debe ingresar un nombre de usuario', 'old': old}
|
|
)
|
|
|
|
if get_user_model().objects.filter(username=username).count() > 0:
|
|
return render(
|
|
request,
|
|
template_name='users/register.html',
|
|
context={'next': get_next_url(request), 'error': 'El nombre de usuario esta en uso', 'old': old}
|
|
)
|
|
|
|
if password and password != password_confirm:
|
|
return render(
|
|
request,
|
|
template_name='users/register.html',
|
|
context={'next': get_next_url(request), 'error': 'Las contraseñas no coinciden', 'old': old}
|
|
)
|
|
|
|
user = get_user_model().objects.create_user(username, email, password)
|
|
auth_login(request, user)
|
|
return HttpResponseRedirect(get_next_url(request))
|