From e8e5bf34a34fa133bd4faddce9dc06e5928dc5e0 Mon Sep 17 00:00:00 2001 From: Nikos Roussos Date: Tue, 21 Jul 2015 11:42:23 +0300 Subject: [PATCH] Add robots and custom 404/500 pages --- network/base/urls.py | 1 + network/base/views.py | 19 ++++++++++++++++++- network/static/css/app.css | 9 +++++++++ network/static/img/error.png | Bin 0 -> 6962 bytes network/templates/404.html | 19 +++++++++++++++---- network/templates/500.html | 18 +++++++++++++----- network/templates/robots.txt | 6 ++++++ network/urls.py | 15 +++++++++++---- 8 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 network/static/img/error.png create mode 100644 network/templates/robots.txt diff --git a/network/base/urls.py b/network/base/urls.py index 7a04d19..ce11cd8 100644 --- a/network/base/urls.py +++ b/network/base/urls.py @@ -6,6 +6,7 @@ urlpatterns = patterns( 'network.base.views', url(r'^$', 'index', name='home'), url(r'^about/$', TemplateView.as_view(template_name='base/about.html'), name='about'), + url(r'^robots\.txt$', 'robots', name='robots'), # Observations url(r'^observations/$', 'observations_list', name='observations_list'), diff --git a/network/base/views.py b/network/base/views.py index 2242889..05fbbda 100644 --- a/network/base/views.py +++ b/network/base/views.py @@ -7,7 +7,7 @@ from django.views.decorators.http import require_POST from django.shortcuts import get_object_or_404, render, redirect from django.core.urlresolvers import reverse from django.utils.timezone import now, make_aware, utc -from django.http import JsonResponse +from django.http import JsonResponse, HttpResponseNotFound, HttpResponseServerError, HttpResponse from django.contrib.auth.decorators import login_required from network.base.models import (Station, Transponder, Observation, @@ -34,6 +34,23 @@ def index(request): return render(request, 'base/home.html', ctx) +def custom_404(request): + """Custom 404 error handler.""" + return HttpResponseNotFound(render(request, '404.html')) + + +def custom_500(request): + """Custom 500 error handler.""" + return HttpResponseServerError(render(request, '500.html')) + + +def robots(request): + data = render(request, 'robots.txt', {'environment': settings.ENVIRONMENT}) + response = HttpResponse(data, + content_type='text/plain; charset=utf-8') + return response + + def observations_list(request): """View to render Observations page.""" observations = Observation.objects.all() diff --git a/network/static/css/app.css b/network/static/css/app.css index 5adb072..67a7608 100644 --- a/network/static/css/app.css +++ b/network/static/css/app.css @@ -59,6 +59,8 @@ body { font-family:'ClearSans'; } + + a:hover { text-decoration: none; } @@ -93,6 +95,13 @@ a:hover { border-color: #eed3d7; } +.error { + margin-top: 40px; + width: 500px; + margin: auto; + text-align: center; +} + .img-avatar { border: 2px solid white; border-radius: 50px; diff --git a/network/static/img/error.png b/network/static/img/error.png new file mode 100644 index 0000000000000000000000000000000000000000..05e85b9d2723b3c30cfde2fe70d651ea6ec90838 GIT binary patch literal 6962 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 KSPOm|@&5qnEPT)a literal 0 HcmV?d00001 diff --git a/network/templates/404.html b/network/templates/404.html index 472c40c..60d2cbc 100644 --- a/network/templates/404.html +++ b/network/templates/404.html @@ -1,9 +1,20 @@ {% extends "base.html" %} +{% load staticfiles %} -{% block title %}Page Not found{% endblock %} +{% block title %} - Page Not found{% endblock %} {% block content %} -

Page Not found

+
+

404

-

This is not the page you were looking for.

-{% endblock content %} \ No newline at end of file +

Page Not Found

+ +

+ This is not the page you were looking for. + Head back to homepage. +

+ +

+ +
+{% endblock content %} diff --git a/network/templates/500.html b/network/templates/500.html index fdf2fe4..258afa3 100644 --- a/network/templates/500.html +++ b/network/templates/500.html @@ -1,12 +1,20 @@ {% extends "base.html" %} +{% load staticfiles %} -{% block title %}Server Error{% endblock %} +{% block title %} - Server Error{% endblock %} {% block content %} -

Ooops!!! 500

+
+

500

-

Looks like something went wrong!

+

Server Error

-

We track these errors automatically, but if the problem persists feel free to contact us. In the meantime, try refreshing.

+

+ We track these errors automatically, but if the problem persists feel free to contact us. + In the meantime, try refreshing. Head back to homepage. +

+ +

+ +
{% endblock content %} - diff --git a/network/templates/robots.txt b/network/templates/robots.txt new file mode 100644 index 0000000..a0d42b4 --- /dev/null +++ b/network/templates/robots.txt @@ -0,0 +1,6 @@ +user-agent: * +{% if environment == 'dev' %} +Disallow: /admin/ +{% else %} +Disallow: / +{% endif %} diff --git a/network/urls.py b/network/urls.py index 5374e12..35c6e76 100644 --- a/network/urls.py +++ b/network/urls.py @@ -1,12 +1,12 @@ -from __future__ import unicode_literals - from django.conf import settings from django.conf.urls import patterns, include, url -from django.conf.urls.static import static from django.contrib import admin +handler404 = 'network.base.views.custom_404' +handler500 = 'network.base.views.custom_500' + urlpatterns = patterns( '', @@ -21,4 +21,11 @@ urlpatterns = patterns( url(r'^api/', include('network.api.urls')) ) -urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +if settings.DEBUG: + urlpatterns += patterns( + '', + url(r'^404/$', handler404), + url(r'^500/$', handler500), + url(r'^media/(?P.*)$', 'django.views.static.serve', + {'document_root': settings.MEDIA_ROOT}), + )