1
Fork 0
e11sync/app/signup/views.py

49 lines
1.5 KiB
Python

import logging
from django.shortcuts import render, redirect
from django.db import IntegrityError
from lib.anonymize_ip import anonymize_ip
from .models import Signup
logger = logging.getLogger(__name__)
def index(request):
if request.method == "POST":
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
anonymous_ip = anonymize_ip(ip)
e = Email(
email = request.POST.get("email"),
anonymized_ip = anonymous_ip,
user_agent = request.META["HTTP_USER_AGENT"],
)
try:
e.clean_fields()
except ValidationError as e:
return e.render(request, "signup/index.html",
{"error_message": e.message})
logging.info("registering email={}".format(request.POST.get("email")))
try:
e.save()
except IntegrityError:
# email already registered, presumably
return redirect("index") + "?already_subscribed"
except DatabaseError:
logger.exception("database error when registering an email")
err = "Sorry, database error. Please come back later."
return render(request, "signup/index.html",
{"error_message": err})
return redirect("index") + "?success"
return render(request, "signup/index.html", {})