from django.views.generic.edit import UpdateView from django.views.generic import ListView from musicians.models import Musician from django import forms from django.http import HttpResponseRedirect from django.shortcuts import render from django.shortcuts import get_object_or_404 class MusicianList(ListView): model = Musician class UserEditForm(forms.ModelForm): email = forms.EmailField() def __init__(self, *args, **kw): if 'instance' in kw.keys(): user = kw['instance'].user initVals = {'email': user.email} if not 'initial' in kw.keys(): kw['initial'] = initVals else: kw['initial'].update(initVals) super(UserEditForm, self).__init__(*args, **kw) self.fields.keyOrder.remove('email') self.fields.keyOrder.insert(2, 'email') def save(self): if self.is_valid(): super(UserEditForm, self).save() self.instance.user.email = self.cleaned_data['email'] self.instance.user.save() class Meta: model = Musician exclude = ['user', 'image', 'small_image', 'instrument', 'position', 'public_description'] # fields = '__all__' def own_profile(request): return user_edit(request, request.user) def user_edit(request, username): musician = get_object_or_404(Musician, user__username=username) if request.method == 'POST': # If the form has been submitted... form = UserEditForm(request.POST) # A form bound to the POST data form.instance = musician if form.is_valid(): # All validation rules pass form.save() return HttpResponseRedirect('/') # Redirect after POST else: form = UserEditForm(instance=musician) return render(request, 'musicians/musician_edit.html', {'form': form, 'musician': musician}) class MusicianUpdate(UpdateView): model = Musician # fields = [] template_name = "musicians/musician_edit.html" success_url = '/books/' def addressbook(request): context = dict() context['musicians'] = Musician.objects.all().order_by('user__first_name') return render(request, 'musicians/addressbook.html', context) ############################################################################################################ ######################### User Management Views ############################################################ ############################################################################################################ from django.contrib.auth.views import PasswordChangeView from django.contrib.auth import authenticate, login, logout from django.shortcuts import redirect from django.http import HttpResponse import json from django.contrib.auth.models import User from datetime import timedelta def change_password(request): return PasswordChangeView.as_view(request, "musicians/change_password.html", post_change_redirect="/") def logout_view(request): logout(request) return redirect(login_view) def userlistForAutocompletion(request): result = [u.username for u in User.objects.all()] return HttpResponse(json.dumps(result), content_type='application/json') def login_view(request): if request.method == 'POST': # If the form has been submitted... raise_first_letter = lambda s: s[:1].upper() + s[1:] if s else '' username = raise_first_letter(request.POST['username']) password = request.POST['password'] user = authenticate(username=username, password=password) result = dict() result['err'] = "" if user is not None: if user.is_active: if not request.POST.get('remember', None): # Expire in one year request.session.set_expiry(timedelta(weeks=52).seconds) else: # Expire on browser close request.session.set_expiry(0) login(request, user) result['redirect'] = "/" print("Setting Redirect") if 'next' in request.POST: result['redirect'] = request.POST["next"] print("Using " + request.POST["next"]) else: result['err'] = "Dein Account wurde deaktiviert." # Return a 'disabled account' error message else: result['err'] = "Falscher Benutzername oder falsches Kennwort." return HttpResponse(json.dumps(result), content_type='application/json') else: # Check if user already logged in if request.user.is_authenticated: return redirect("/") if 'next' in request.GET: nextPage = request.GET['next'] else: nextPage = "/" return render(request, 'musicians/login.html', {'next': nextPage})