Built-in errors in a web application usually give users a 404 message, which means a page could not be found. There are other similar errors, such as 403, 400, and 500. We categorize all such errors as HTTP errors.
Some examples of HTTP errors are explained below:
404 error: This is also known as a page not found error. It usually pops up if the page we try to access does not exist.
django.views.defaults.page_not_found(), which in turn renders the default 404 error template.404.html file in the template folder.
403 error: This is also known as a forbidden page error. It usually pops up when the user is not authenticated or permitted to access a certain page or perform a certain action in the web application. For example, the user may not be logged in or granted super-user abilities to access, delete, or change certain files.
django.views.defaults.permission_denied(), which in turn renders the default 403 error template.403.html file in the template folder.
400 error: This is also known as bad request view. It usually pops up either when a user tries to access and pull out confidential data in the website, or when a file’s size is too large, corrupting browser cache and cookies. This error usually helps prevent the event of being hacked by other users.
django.views.defaults.bad_request(), which in turn renders the default 400 error template.400.html file in the template folder.
500 error: This is also known as an internal server error. It usually pops up when there is a runtime error in the view code, and during failures when collecting static files.
django.views.defaults.server_error(), which in turn renders the default 500 error template.500.html file in the template folder.
Let’s get to the code.
We use the following commands to create a virtual environment, and also install Django:
pip install pipenv
pipenv shell
pipenv install django
We create the project and its application:
django-admin startproject Educative ./
python manage.py startapp codebase
We migrate everything in the Django application, and start the server:
python manage.py migrate
python manage.py runserver
We go to settings.py and enter the following:
# Set debug to falseDEBUG = False# To allow any hostALLOWED_HOSTS = ['*']# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','codebase',]
We go to urls.py file and enter the following:
from django.contrib import adminfrom django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('/home', include('codebase.urls'))]# Customizing the built error pageshandler404 = 'codebase.views.error_404'handler500 = 'codebase.views.error_500'handler403 = 'codebase.views.error_403'handler400 = 'codebase.views.error_400'
In the codebase application folder, we go to views.py:
from django.shortcuts import renderdef error_404(request, exception):return render(request, 'app/404.html')def error_500(request, *args, **argv):return render(request, 'app/500.html', status=500)def error_403(request, exception):return render(request,'app/403.html')def error_400(request, exception):return render(request,'app/400.html')
In the codebase app, we create a folder and name it templates.
Inside the templates folder, we create another folder and name it app.
Inside the app folder, we create the 404.html, 400.html, 403.html, 500.html files and customize them to our taste.
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><P> PAGE NOT FOUND, 404</P></body></html>
To test our app, we run the following command:
python manage.py runserver
We can type anything at the end of http://127.0.0.1:8000 to get a 404 error that isn’t listed as a route in the Django application.
Note: We must remember to set
DEBUG=falsein oursettings.pyfile to get the customized page.
The following is a screenshot of a customized 404 page that pops up when we type a route that doesn’t exist.
Once we execute all the commands above, click the “Run” button to see the results.
Note: We have set everything on our platform. You don’t need to type any commands here.