This article is a soft and practical introduction to Django Routing System. The sample we will code during this tutorial, in the end, will implement three routes: a default route that shows a classic Hello World, a 2nd route that displays a random number at each page refresh, and the last route will show a random image pulled from the internet.
Thanks for reading! - Content provided by App Generator.
- Django Routing Sample - the source code (Github/MIT License)
- More Django Samples provided with authentication, basic modules
What is Django
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.
- Django - official website
- Django Docs - recommended starting point for every aspire Django developer
Let's Code Django
Check Python Version - recommended version is Python3
$ python --version Python 3.8.4 <-- All good, we have a 3.x version
Create/activate a virtual environment - Unix-based system
$ virtualenv env $ source env/bin/activate
For Windows, the syntax is slightly different
$ virtualenv env $ .\env\Scripts\activate
$ pip install django
Create a new Django Project
$ mkdir my-django-sample $ cd my-django-sample
Inside the new directory, we will invoke
$ django-admin startproject config .
Note: Take into account that
. at the end of the command.
Setup the database
$ python manage.py makemigrations $ python manage.py migrate
Start the app
$ python manage.py runserver $ $ # Access the web app in browser: http://127.0.0.1:8000/
At this point we should see the default Django page in the browser:
Create a new Django application
$ python manage.py startapp sample
Add a simple Django Route
sample/views.py as shown below:
def hello(request): return HttpResponse("Hello Django")
Configure Django to use the new route - update
config/urls.py as below:
from django.contrib import admin from django.urls import path from django.conf.urls import include, url # <-- NEW from sample.views import hello # <-- NEW urlpatterns = [ path('admin/', admin.site.urls), url('', hello), # <-- NEW ]
In other words, the default route is served by
hello method defined in
sample/views.py. On access the root page, we should see a simple Hello Word message:
New Route - Dynamic content
Let's create a new route that shows a random number -
... from random import random ... def myrandom(request): return HttpResponse("Random - " + str( random() ) )
The new method invoke
random() from Python core library, converts the result to a string and returns the result. The browser output should be similar to this:
New Route - Random Images
This route will pull a random image from a public (and free) service and inject the returned content into the browser response. To achieve this goal, we need a new Python library called
requests to pull the random image with ease.
$ pip install requests
The code for the new route should be defined in
... import requests ... def randomimage(request): r = requests.get('http://thecatapi.com/api/images/get?format=src&type=png') return HttpResponse( r.content, content_type="image/png")
To see the effects in the browser, the
routing configuration should be updated accordingly.
# Contents of config/urls.py ... from sample.views import hello, myrandom, randomimage # <-- Updated ... urlpatterns = [ path('admin/' , admin.site.urls), url('randomimage' , randomimage), # <-- New url('random' , myrandom), url('' , hello), ]
Here is a sample output - randomly selected from a public service:
Thanks for reading! Feel free to AMA in the comments section.
More Django Resources
- Read more about Django (official docs)
- Start fast a new project using development-ready Django Starters
Top comments (8)
Nice and simple.
Ty! More (simple) tutorials will come.
Loved the simple article!
Can someone tell me why '.' was added at the end of startproject command? Django documentation did not have that so was wondering what that does. I am kinda new django and was trying to learn as much as I can.
Thank you! The
.means to create the product in the current directory.
If you use the option to provide a directory name
my_projectfor instance, Django will generate something like this:
In my projects i prefer to isolate the initial Django project in something names
Anyway, feel free to code the project in your own way.
You should rename this tutorial to How to display a random cat with Django.
P.S. Really nice content!
:) .. Thanks for your suggestion.
For the next article I will listen your advice and choose a funny title.
Thank for writing!
Yw! More will come.
Feel free to suggest a Django-related topic.