tobyqin/testcube

View on GitHub
testcube/users/views.py

Summary

Maintainability
C
1 day
Test Coverage
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.forms import AuthenticationForm
from django.shortcuts import render, redirect

from .forms import SignUpForm, UserProfileForm, ResetPasswordForm
from ..utils import get_domain


def to_next_page(request):
    next_page = request.GET.get('next', '/')
    return redirect(next_page)


def signup(request):
    if request.user.is_authenticated:
        return to_next_page(request)

    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return to_next_page(request)
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form, 'domain': get_domain()})


def signin(request):
    if request.user.is_authenticated:
        return to_next_page(request)

    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=raw_password)
            if user:
                login(request, user)
                return to_next_page(request)
            else:
                form.add_error('username', 'Invalid username or password!')
    else:
        form = AuthenticationForm()
    return render(request, 'signin.html', {'form': form})


def signout(request):
    logout(request)
    return to_next_page(request)


def reset_password(request):
    if not request.user.is_superuser:
        return render(request, 'reset_password.html',
                      {'error': "Please ask administrator to process password reset."})

    if request.method == 'POST':
        form = ResetPasswordForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return render(request, 'reset_password.html', {'form': form, 'message': 'Reset success.'})

    else:
        form = ResetPasswordForm(instance=request.user)
    return render(request, 'reset_password.html', {'form': form})


def user_profile(request):
    if not request.user.is_authenticated:
        return to_next_page(request)

    if request.method == 'POST':
        form = UserProfileForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return render(request, 'user_profile.html', {'form': form,
                                                         'success_message': "Your user profile is updated!"})
    else:
        form = UserProfileForm(instance=request.user)
    return render(request, 'user_profile.html', {'form': form})