Exemplo n.º 1
0
def do_click(request, path):
    """takes a request, finds a MyUrl or raises a 404"""
    if request.method == "GET":
        # see if we have a match if not, 404!
        try:
            myurl = MyUrl.objects.get(short_path__iexact=path)
        except:
            raise Http404
        # We have a match, so save click data and redirect
        click = Click(myurl=myurl,
                      to_url=myurl.to_url,
                      redirect_url=myurl.redirect_url,
                      referrer_domain=request.META.HTTP_REMOTE_HOST,
                      referrer_url=request.META.HTTP_REFERRER,
                      site=Site.objects.get_current(),
                      user=request.user,
                      user_ip=request.META.HTTP_HOST,
                      user_language=request.META.HTTP_ACCEPT_LANGUAGE,
                      user_agent=request.META.HTTP_USER_AGENT)
        click.save()
        # do the redirect
        if myurl.redirect_type == '301':
            return HttpResponsePermanentRedirect(myurl.redirect_url)
        else:
            return HttpResponseRedirect(myurl.redirect_url)
Exemplo n.º 2
0
 def process_response(self, request, response):
     """Accepts a Django request and redirects to a matching myurl"""
     if response.status_code != 404:
         return response
     # remove / from front of URL
     path = request.get_full_path()[1:]
     # get the myurl - even if someone appends a trailing /
     if path.endswith('/'):
         try:
             myurl = MyUrl.objects.get(
                 short_path__exact=path[:path.rfind('/')] +
                 path[path.rfind('/') + 1:])
         except MyUrl.DoesNotExist:
             myurl = None
     else:
         try:
             myurl = MyUrl.objects.get(short_path__exact=path)
         except MyUrl.DoesNotExist:
             myurl = None
             # need to put somethign here for failed clicks.
     # see if myurl is defined
     # Makes sure we are not redirecting to nowhere
     if myurl is None:
         return http.HttpResponseGone()
     else:
         # create and save the click history
         user = None if request.user.is_anonymous else request.user
         # Store HTTP headers if we have them
         try:
             referrer_url = request.META.HTTP_REFERRER
         except AttributeError:
             referrer_url = None
         try:
             user_domain = request.META.REMOTE_HOST
         except AttributeError:
             user_domain = None
         try:
             user_language = request.META.HTTP_ACCEPT_LANGUAGE
         except AttributeError:
             user_language = None
         try:
             user_agent = request.META.HTTP_USER_AGENT
         except AttributeError:
             user_agent = None
         try:
             user_ip = request.META.REMOTE_ADDR
         except AttributeError:
             user_ip = None
         click = Click(myurl=myurl,
                       to_url=myurl.to_url,
                       redirect_url=myurl.redirect_url,
                       user_domain=user_domain,
                       referrer_url=referrer_url,
                       site_id=settings.SITE_ID,
                       user=user,
                       user_ip=user_ip,
                       user_language=user_language,
                       user_agent=user_agent)
         click.save()
         # do the redirect
         if myurl.redirect_type == '301':
             return http.HttpResponsePermanentRedirect(myurl.redirect_url)
         else:
             return http.HttpResponseRedirect(myurl.redirect_url)
         # No MyUrl was found. Let Django deal with it.
     return response
Exemplo n.º 3
0
 def process_response(self, request, response):
     """Accepts a Django request and redirects to a matching myurl"""
     if response.status_code != 404:
         return response
     # remove / from front of URL
     path = request.get_full_path()[1:]
     # get the myurl - even if someone appends a trailing /
     if path.endswith('/'):
         try:
             myurl = MyUrl.objects.get(
                 short_path__exact=path[:path.rfind('/')]+path[path.rfind('/')+1:])
         except MyUrl.DoesNotExist:                
             myurl=None
     else:
         try:
             myurl = MyUrl.objects.get(short_path__exact=path)
         except MyUrl.DoesNotExist:
             myurl=None
             # need to put somethign here for failed clicks.
     # see if myurl is defined
     # Makes sure we are not redirecting to nowhere
     if myurl is None:
             return http.HttpResponseGone()       
     else:
         # create and save the click history
         user = None if request.user.is_anonymous else request.user
         # Store HTTP headers if we have them
         try:
             referrer_url = request.META.HTTP_REFERRER
         except AttributeError:
             referrer_url = None
         try:
             user_domain = request.META.REMOTE_HOST
         except AttributeError:
             user_domain = None
         try:
             user_language = request.META.HTTP_ACCEPT_LANGUAGE
         except AttributeError:
             user_language = None
         try:
             user_agent = request.META.HTTP_USER_AGENT
         except AttributeError:
             user_agent = None
         try:
             user_ip = request.META.REMOTE_ADDR
         except AttributeError:
             user_ip = None
         click = Click(myurl=myurl,
                       to_url=myurl.to_url,
                       redirect_url=myurl.redirect_url,
                       user_domain=user_domain,
                       referrer_url=referrer_url,
                       site_id=settings.SITE_ID,
                       user=user,
                       user_ip=user_ip,
                       user_language=user_language,
                       user_agent=user_agent)
         click.save()
         # do the redirect
         if myurl.redirect_type == '301':
             return http.HttpResponsePermanentRedirect(myurl.redirect_url)
         else:
             return http.HttpResponseRedirect(myurl.redirect_url)
         # No MyUrl was found. Let Django deal with it.
     return response