Files
Pinry/users/views.py

88 lines
2.8 KiB
Python
Raw Normal View History

import json
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Permission
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponse
from django.template.response import TemplateResponse
from django.utils.functional import lazy
from django.views.generic import CreateView
from rest_framework.renderers import JSONRenderer
from core.serializers import UserSerializer
from .forms import UserCreationForm
2018-02-08 21:57:49 -05:00
from users.models import User
2019-02-22 17:40:02 +08:00
def reverse_lazy(name=None, *args):
return lazy(reverse, str)(name, args=args)
class CreateUser(CreateView):
template_name = 'users/register.html'
model = User
form_class = UserCreationForm
2013-03-03 05:38:24 -08:00
success_url = reverse_lazy('core:recent-pins')
def get(self, request, *args, **kwargs):
if not settings.ALLOW_NEW_REGISTRATIONS:
messages.error(request, "The admin of this service is not allowing new registrations.")
2013-03-03 10:08:46 -08:00
return HttpResponseRedirect(reverse('core:recent-pins'))
return super(CreateUser, self).get(request, *args, **kwargs)
def form_valid(self, form):
redirect = super(CreateUser, self).form_valid(form)
permissions = Permission.objects.filter(codename__in=['add_pin', 'add_image'])
user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password'])
user.user_permissions = permissions
login(self.request, user)
return redirect
def login_user(request):
try:
data = json.loads(request.body)
except json.JSONDecodeError:
return HttpResponseBadRequest()
if 'username' not in data:
return HttpResponseBadRequest(
json.dumps({"username": "this field is required"})
)
if 'password' not in data:
return HttpResponseBadRequest(
json.dumps({"password": "this field is required"})
)
user = authenticate(
request,
username=data['username'],
password=data['password']
)
if not user:
return HttpResponseBadRequest(
json.dumps({"password": "username and password doesn't match"})
)
login(request, user)
data = UserSerializer(
user,
context={'request': request},
).data
return HttpResponse(
JSONRenderer().render(data),
content_type="application/json"
)
@login_required
def logout_user(request):
logout(request)
messages.success(request, 'You have successfully logged out.')
return HttpResponseRedirect(reverse('core:recent-pins'))
def private(request):
return TemplateResponse(request, 'users/private.html', None)