Added all the files from kiwipycon and the changes made for SciPy.in.
# -*- coding: utf-8 -*-
from __future__ import absolute_import
#python
from urlparse import urlparse
import urllib
import os
#django
from django.conf import settings
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.db.models.signals import post_save
#django.contrib
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.forms import PasswordChangeForm
from django.core.exceptions import ObjectDoesNotExist
#PIL
from PIL import Image
#kiwipycon
from project.kiwipycon.utils import set_message_cookie
from project.kiwipycon.talk.models import Talk
from project.kiwipycon.registration.models import Registration
from project.kiwipycon.registration.models import Wifi
from project.kiwipycon.registration.forms import WifiForm
from project.kiwipycon.sponsor.models import Sponsor
from .utils import kiwipycon_createuser
from .utils import handle_uploaded_photo
from .forms import RegisterForm
from .forms import EditProfileForm
from .forms import UsernameForm
@login_required
def account(request, template_name="user/account.html"):
"""Displays the main screen of the current user's account.
"""
user = request.user
profile = user.get_profile()
talks = Talk.objects.filter(speaker=user)
try:
registration = Registration.objects.get(registrant=user)
except ObjectDoesNotExist:
registration = None
try:
wifiobj = Wifi.objects.get(user=user)
except ObjectDoesNotExist:
wifiobj = None
if profile.photo:
photo = os.path.join(settings.USER_MEDIA_URL, profile.photo)
else:
photo = '/img/user-default.png'
qstring = ""
wifi_comment = None
if wifiobj:
wifi_form = False
else:
if request.method == "POST":
wifi_form = WifiForm(request.POST)
if wifi_form.is_valid():
wifi_form.save(user)
wifi_comment = 'Thanks, your wifi preference has been saved'
wifi_form = None
else:
wifi_form = WifiForm()
return render_to_response(template_name, RequestContext(request, {
"form" : wifi_form, "comment": wifi_comment,
"user" : user, "profile" : profile, "photo" : photo,
"talks" : talks, "registration" : registration,
}))
@login_required
def edit_profile(request, template_name="user/editprofile.html"):
"""Allows user to edit profile
"""
user = request.user
profile = user.get_profile()
if request.method == "POST":
form = EditProfileForm(data=request.POST,
files=request.FILES)
if form.is_valid():
photo = request.FILES.get('photo', None)
filename= None
if photo:
filename = handle_uploaded_photo(user, request.FILES['photo'])
if filename:
profile.photo = filename
user.email = form.data.get("email")
user.first_name = form.data.get("first_name")
user.last_name = form.data.get("last_name")
user.save()
profile.url = form.data.get("url")
profile.about = form.data.get("about")
profile.save()
redirect_to = reverse("kiwipycon_account")
return set_message_cookie(redirect_to,
msg = u"Your profile has been changed.")
else:
form = EditProfileForm(initial={"email" : user.email,
"email2" : user.email, # hidden field
"first_name" : user.first_name,
"last_name" : user.last_name,
"url" : profile.url,
"about" : profile.about,
})
return render_to_response(template_name, RequestContext(request, {
"form": form
}))
def login(request, template_name="user/login.html"):
"""Custom view to login or register/login a user.
Integration of register and login form
It uses Django's standard AuthenticationForm, though.
"""
user = request.user
if user.is_authenticated():
redirect_to = reverse("kiwipycon_account")
return set_message_cookie(redirect_to,
msg = u"Redirected to account from login form.")
# Using Djangos default AuthenticationForm
login_form = AuthenticationForm()
register_form = RegisterForm()
if request.POST.get("action") == "login":
login_form = AuthenticationForm(data=request.POST)
if login_form.is_valid():
redirect_to = request.POST.get("next")
# Light security check -- make sure redirect_to isn't garbage.
if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
redirect_to = reverse("kiwipycon_account")
from django.contrib.auth import login
login(request, login_form.get_user())
return set_message_cookie(redirect_to, msg = u"You have been logged in.")
elif request.POST.get("action") == "register":
register_form = RegisterForm(data=request.POST)
if register_form.is_valid():
user = kiwipycon_createuser(request, register_form.data)
redirect_to = request.POST.get("next")
if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
redirect_to = reverse("kiwipycon_account")
return set_message_cookie(
redirect_to, msg = u"You have been registered and logged in.")
# Get next_url
next_url = request.REQUEST.get("next")
if next_url is None:
next_url = request.META.get("HTTP_REFERER")
if next_url is None:
next_url = reverse("kiwipycon_account")
# Get just the path of the url. See django.contrib.auth.views.login for more
next_url = urlparse(next_url)
next_url = next_url[2]
try:
login_form_errors = login_form.errors["__all__"]
except KeyError:
login_form_errors = None
return render_to_response(template_name, RequestContext(request, {
"login_form" : login_form,
"login_form_errors" : login_form_errors,
"register_form" : register_form,
"next_url" : next_url,
}))
def logout(request):
"""Custom method to logout a user.
The reason to use a custom logout method is just to provide a login and a
logoutmethod on one place.
"""
from django.contrib.auth import logout
logout(request)
redirect_to = '/'
return set_message_cookie(redirect_to, msg = u"You have been logged out.")
@login_required
def password(request, template_name="user/password.html"):
"""Changes the password of current user.
"""
if request.method == "POST":
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
form.save()
redirect_to = reverse("kiwipycon_account")
return set_message_cookie(redirect_to,
msg = u"Your password has been changed.")
else:
form = PasswordChangeForm(request.user)
return render_to_response(template_name, RequestContext(request, {
"form" : form
}))
@login_required
def username(request, template_name="user/username.html"):
"""Saves the username from the data form.
"""
if request.method == "POST":
username_form = UsernameForm(initial={"username" : request.user.username}, data=request.POST)
if username_form.is_valid():
request.user.username = username_form.cleaned_data.get("username")
request.user.save()
redirect_to = reverse("kiwipycon_account")
return set_message_cookie(redirect_to,
msg = u"Your username has been changed.")
else:
username_form = UsernameForm(initial={"username" : request.user.username})
return render_to_response(template_name, RequestContext(request, {
"form": username_form
}))