diff apps/profile/views.py @ 130:5ab229c9d348

Add back ability to edit account settings * Account/profile editing is now done with a ModelForm, instead of processing the data manually. Help text and verbose names have been moved to the Profile model and to the UserForm (in the latter case, it's because we can't edit the User model directly). * The profile page now shows pygments style information and sections of the profile that are not filled are now hidden. * Some parts of apps/profiles/views.py have been rewritten (the getprofile() method has been removed, as it's no longer necessary, and the editprofile() view was rewritten in accordance with the switch to using ModelForms). * The styling for forms has been modified slightly.
author dellsystem <ilostwaldo@gmail.com>
date Sat, 22 Sep 2012 11:18:23 -0400
parents a8da60d611f7
children c7be7def8b57
line wrap: on
line diff
--- a/apps/profile/views.py	Sat Sep 22 11:12:30 2012 -0400
+++ b/apps/profile/views.py	Sat Sep 22 11:18:23 2012 -0400
@@ -1,81 +1,57 @@
-from django.shortcuts import render_to_response, get_object_or_404
+from django.shortcuts import render, get_object_or_404, redirect
 from django.contrib.auth.models import User
-from django.http import Http404, HttpResponseRedirect
-from django.core.urlresolvers import reverse
 from django.contrib.auth.decorators import login_required
-from django.views.generic.simple import direct_to_template
 
 from agora.apps.free_license.models import FreeLicense
 from agora.apps.bundle.models import Bundle
 from agora.apps.snippet.models import Snippet
 from agora.apps.profile.models import Profile
-from agora.middleware.http import Http403
+from agora.apps.profile.forms import UserForm, ProfileForm
 
 
-def getprofile(user):
-    u = get_object_or_404(User, username=user)
-
-    #Inactive users "don't exist"
-    if not u.is_active:
-        raise Http404
+def showprofile(request, username):
+    user = get_object_or_404(User, username=username)
+    profile = user.get_profile()
 
-    #Get profile or create a default if none exists
-    try:
-        p = u.get_profile()
-    except Profile.DoesNotExist:
-        #At least one FreeLicense *must* exist.
-        p = Profile(user=u, preferred_license=FreeLicense.objects.get(id=1))
-        p.save()
-
-    return [u,p]
+    if user.first_name or user.last_name:
+        name = user.get_full_name()
+    else:
+        name = user.username
 
-def showprofile(request, user):
-    [u,p] = getprofile(user)
-
-    if u.first_name or u.last_name:
-        n = u.get_full_name()
-    else:
-        n = u.username
+    b = Bundle.objects.filter(uploader=user)
+    s = Snippet.objects.filter(author=user)
 
-    b = Bundle.objects.filter(uploader=u)
-    s = Snippet.objects.filter(author=u)
+    context = {
+        'profile': user.get_profile,
+        'name': name,
+        'bundles': Bundle.objects.filter(uploader=user),
+        'snippets': Snippet.objects.filter(author=user),
+    }
 
-    return direct_to_template(request, 'profile/user.djhtml',
-                              {
-                                  'profile' : p,
-                                  'bundles' : b,
-                                  'snippets' : s,
-                                  'name' : n,
-                               },
-                              )
+    return render(request, 'profile/user.djhtml', context)
+
 
 @login_required
 def editprofile(request):
-    [u,p] = getprofile(request.user)
+    user = request.user
+    profile = user.get_profile()
 
-    if request.method=='POST':
-        u.first_name = request.POST['first-name']
-        u.last_name  = request.POST['last-name']
-        u.save()
-
-        try:
-            p.preferred_license = \
-                            FreeLicense.objects.get(id=request.POST['license'])
-        except:
-            p.preferred_license = FreeLicense.objects.get(id=1)
+    if request.method == 'POST':
+        user_form = UserForm(request.POST, instance=user)
+        profile_form = ProfileForm(request.POST, instance=profile)
 
-        p.interests = request.POST['interests']
-        p.blurb = request.POST['blurb']
-        p.save()
-        return HttpResponseRedirect(reverse(
-                                    'agora.apps.profile.views.showprofile',
-                                    args=(u,))
-                                    )
+        if user_form.is_valid() and profile_form.is_valid():
+            user_form.save()
+            profile_form.save()
+            return redirect(user)
+    else:
+        user_form = UserForm(instance=user)
+        profile_form = ProfileForm(instance=profile)
 
-    licenses = FreeLicense.objects.all()
-    return direct_to_template(request, 'profile/edit-user.djhtml',
-                              {
-                                  'profile' : p,
-                                  'licenses' : licenses,
-                              },
-                              )
+    context = {
+        'profile': profile,
+        'user_form': user_form,
+        'profile_form': profile_form,
+    }
+
+    return render(request, 'profile/edit-user.djhtml', context)