qrurls: basic functionality
authorTero Marttila <terom@fixme.fi>
Mon, 15 Jul 2013 01:35:50 +0300
changeset 2 e838dda048a6
parent 1 d030ad754c10
child 3 e7d3f1a28b24
qrurls: basic functionality
.hgignore
cmpuqrct/settings.py
cmpuqrct/urls.py
qrurls/admin.py
qrurls/migrations/0001_initial.py
qrurls/migrations/__init__.py
qrurls/models.py
qrurls/views.py
--- a/.hgignore	Tue Jul 09 01:09:48 2013 +0300
+++ b/.hgignore	Mon Jul 15 01:35:50 2013 +0300
@@ -1,6 +1,7 @@
 syntax: glob
 
 *.pyc
+.*.sw[op]
 
 lib/
 bin/
--- a/cmpuqrct/settings.py	Tue Jul 09 01:09:48 2013 +0300
+++ b/cmpuqrct/settings.py	Mon Jul 15 01:35:50 2013 +0300
@@ -115,6 +115,7 @@
 )
 
 INSTALLED_APPS = (
+    'qrurls',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
@@ -123,6 +124,7 @@
     'django.contrib.staticfiles',
     'django.contrib.admin',
     'django.contrib.admindocs',
+    'south',
 )
 
 # A sample logging configuration. The only tangible logging
--- a/cmpuqrct/urls.py	Tue Jul 09 01:09:48 2013 +0300
+++ b/cmpuqrct/urls.py	Mon Jul 15 01:35:50 2013 +0300
@@ -1,17 +1,14 @@
 from django.conf.urls import patterns, include, url
 
-# Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
+from django.contrib import admin
+admin.autodiscover()
+
+import qrurls.views
 
 urlpatterns = patterns('',
     # Examples:
-    # url(r'^$', 'cmpuqrct.views.home', name='home'),
-    # url(r'^cmpuqrct/', include('cmpuqrct.foo.urls')),
+    url(r'^urls/(?P<shorturl>\w+)', qrurls.views.shorturl, name='shorturl'),
 
-    # Uncomment the admin/doc line below to enable admin documentation:
     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
-    # Uncomment the next line to enable the admin:
-    # url(r'^admin/', include(admin.site.urls)),
+    url(r'^admin/', include(admin.site.urls)),
 )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qrurls/admin.py	Mon Jul 15 01:35:50 2013 +0300
@@ -0,0 +1,15 @@
+from django.contrib import admin
+from qrurls.models import URL, URLItem
+
+class URLAdmin (admin.ModelAdmin) :
+    list_display = (
+        'shorturl',
+    )
+
+class URLItemAdmin (admin.ModelAdmin) :
+    list_display = (
+        'shorturl', 'published', 'url',
+    )
+
+admin.site.register(URL, URLAdmin)
+admin.site.register(URLItem, URLItemAdmin)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qrurls/migrations/0001_initial.py	Mon Jul 15 01:35:50 2013 +0300
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding model 'URL'
+        db.create_table(u'qrurls_url', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('shorturl', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=50)),
+        ))
+        db.send_create_signal(u'qrurls', ['URL'])
+
+        # Adding model 'URLItem'
+        db.create_table(u'qrurls_urlitem', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('shorturl', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['qrurls.URL'])),
+            ('published', self.gf('django.db.models.fields.DateTimeField')()),
+            ('url', self.gf('django.db.models.fields.URLField')(max_length=200)),
+        ))
+        db.send_create_signal(u'qrurls', ['URLItem'])
+
+
+    def backwards(self, orm):
+        # Deleting model 'URL'
+        db.delete_table(u'qrurls_url')
+
+        # Deleting model 'URLItem'
+        db.delete_table(u'qrurls_urlitem')
+
+
+    models = {
+        u'qrurls.url': {
+            'Meta': {'object_name': 'URL'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'shorturl': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'})
+        },
+        u'qrurls.urlitem': {
+            'Meta': {'object_name': 'URLItem'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'published': ('django.db.models.fields.DateTimeField', [], {}),
+            'shorturl': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['qrurls.URL']"}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+        }
+    }
+
+    complete_apps = ['qrurls']
\ No newline at end of file
--- a/qrurls/models.py	Tue Jul 09 01:09:48 2013 +0300
+++ b/qrurls/models.py	Mon Jul 15 01:35:50 2013 +0300
@@ -1,3 +1,22 @@
 from django.db import models
+from django.core.urlresolvers import reverse
 
-# Create your models here.
+class URL(models.Model):
+    shorturl = models.SlugField(unique=True)
+
+    def get_absolute_url (self) :
+        return reverse('shorturl', args=[self.shorturl])
+
+    def __unicode__ (self) :
+        return self.shorturl
+
+class URLItem(models.Model):
+    shorturl = models.ForeignKey(URL)
+    published = models.DateTimeField()
+    url = models.URLField()
+    
+    def get_absolute_url (self) :
+        return self.url
+    
+    def __unicode__ (self) :
+        return self.url
--- a/qrurls/views.py	Tue Jul 09 01:09:48 2013 +0300
+++ b/qrurls/views.py	Mon Jul 15 01:35:50 2013 +0300
@@ -1,1 +1,20 @@
-# Create your views here.
+from django.http import HttpResponse, HttpResponseRedirect, Http404
+from django.utils import timezone
+
+from qrurls.models import URL, URLItem
+
+def shorturl (request, shorturl) :
+    shorturl = shorturl.strip(' /')
+    try :
+        url = URL.objects.get(shorturl=shorturl)
+    except URL.DoesNotExist :
+        raise Http404()
+
+    try :
+        # most recent
+        url_item = URLItem.objects.filter(shorturl=url, published__gt=timezone.now()).order_by('published')[0]
+    except IndexError :
+        raise Http404()
+    
+    return HttpResponseRedirect(url_item.get_absolute_url())
+