--- 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())
+