def shortener(request): real_url = request.POST.get('long_url', '') long_url = validate_url(real_url) if not long_url: return render(request, 'url_validation_error.html', {'bad_url': real_url}) elif Master.objects.filter(long_url=long_url).exists(): temp_short = Master.objects.get(long_url=long_url) return render(request, 'exists.html', {'shorten': temp_short.short_url}) else: record = Master(short_url='', long_url=long_url, creation_time=datetime.now(), clicks=0) record.save() # Unique Code Generator Function for SHORT_URL short_url = encode(record.id) Master.objects.filter(id=record.id).update(short_url=short_url) return render(request, 'shortener.html', {'long_url': long_url, 'short_url': short_url})
def test_validate_url(self): self.assertEqual(validate_url('http://url.com'), 'http://url.com') self.assertEqual(validate_url('http://www.url.com'), 'http://www.url.com') self.assertEqual(validate_url('http://url.'), None) self.assertEqual(validate_url('http://url.url.com'), 'http://url.url.com') self.assertEqual(validate_url('http://sub1.sub2.url.com'), 'http://sub1.sub2.url.com') self.assertEqual(validate_url('http://url.com/path/to/some/folder'), 'http://url.com/path/to/some/folder') self.assertEqual(validate_url('http://url.com/path/to/some/folder/'), 'http://url.com/path/to/some/folder/') self.assertEqual(validate_url('http://url.com/?param1'), 'http://url.com/?param1') self.assertEqual(validate_url('http://url.com/?param1=1'), 'http://url.com/?param1=1') self.assertEqual(validate_url('http://url.com/?param1=something'), 'http://url.com/?param1=something') self.assertEqual(validate_url('https://newprotocol.com/'), 'https://newprotocol.com/') self.assertEqual(validate_url('ftp://newprotocol.com/'), 'ftp://newprotocol.com/') # Tests without protocol ... self.assertEqual(validate_url('url.com'), 'http://url.com') self.assertEqual(validate_url('www.url.com'), 'http://www.url.com') self.assertEqual(validate_url('url.'), None) self.assertEqual(validate_url('url.url.com'), 'http://url.url.com') self.assertEqual(validate_url('sub1.sub2.url.com'), 'http://sub1.sub2.url.com') self.assertEqual(validate_url('url.com/path/to/some/folder'), 'http://url.com/path/to/some/folder') self.assertEqual(validate_url('url.com/path/to/some/folder/'), 'http://url.com/path/to/some/folder/') self.assertEqual(validate_url('url.com/?param1'), 'http://url.com/?param1') self.assertEqual(validate_url('url.com/?param1=1'), 'http://url.com/?param1=1') self.assertEqual(validate_url('url.com/?param1=something'), 'http://url.com/?param1=something') self.assertEqual(validate_url('newprotocol.com/'), 'http://newprotocol.com/') self.assertEqual(validate_url('ftp:/newprotocol.com/'), None)