DEV Community

Cover image for "Getting Started With Django"
Ada Nduka Oyom
Ada Nduka Oyom

Posted on

"Getting Started With Django"

New to Python? or already dancing some tango with it and you feel it’s time to dabble into some framework magic for web?

Meet Django:
DJANGO is a web framework built entirely on python,it’s free, open-sourced and also follows the Model View Controller pattern, (in this case; Model, Template, View — Where the View relates to the Controller and The Template relates to the View in the MVC pattern. This part can be a bit confusing to newbies starting out, but along the line you’ll get to understand the logic behind this more :). There are already lots of popular sites running on django, examples are: instagram, pinterest etc
alt text

sites running on Django

Django also provides some excellent documentation here,along with features and tools, some of which include:

  • A nice templating language.
  • Security features like CSRF
  • Excellent lightweight server for development and testing e.t.c

In this tutorial, I will be showing you how to get your first Django website up and running. Before we start, we need to have Python downloaded and installed on our System, to download and install python, click here .
Note: You need to already have a basic understanding of python, also I’ll be running this tutorial on a Linux based system, so most commands would follow suite the linux way. But there will be little or no difference on most.
To ensure it’s fully downloaded, open up your terminal and type in

python

An interactive shell shows up:

Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

To exit, type in ctrl + z.

To have a more neater arrangement, it’s always advisable to create a directory for your projects

mkdir folder_name

Then cd into the project with:

cd folder_name

(every other step will be carried out while inside this folder)

Set Up Your Virtual Environment:

Next thing we need to do, is set up our virtual environment, a virtual environment helps you run several versions of python/django right on your machine (e.g you could have two different python/django projects running on different versions, to avoid them clashing and to give you room to run them both without errors, the virtual environment comes to your rescue. One virtual environment = one python/django version).It’s strongly advised to always use a virtual environment.
To set up our virtual environment, we’ll be using python’s package manager pip to do the installation, type in:

pip install virtualenv

After installation,it’s time to create a virtual environment that would enable us use a preferred django version of our choice:

virtualenv env_name

Note: env_name should be replaced with the preferred name of your environment. (I like to name my environments with the django version installed in it for easier recognition).

Activating Virtual Environment:

To activate our virtual environment for linux/Mac OS:

source env_name/bin/activate

For windows:

env_name/script
activate

Install Django:
Now it’s time to install django on to our machine:

pip install django==1.8

Using ==1.8 only gives a direction to django about the particular version you want to install, in this case version 1.8. To just go ahead and download the latest version, input pip install django .

Starting A project:
Now we have django up and running, it’s time to start up our first project! Yaah!. Still in our command line, type in :

django-admin.py startproject project_name

Note: project_name = name of your project . In this case, we’ll work with mask_off as our project name.

This creates a sub-folder with the name mask_off and a skeleton structure of

mask_off
├─mask_off
│ ├── init.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

Django gives us more ease by creating the above files:
1) the init.py helps python treat the directories as containing packages; so as to prevent directories with a common name, from unintentionally hiding valid modules that occur later (deeper) on the module search path.In most cases, it’s usually an empty file.
2) The settings.py file contains all settings your project requires, as we progress, we’ll visit this file often.
3) The WSGI (Web Server Gateway Interface) acts as the interface our web server uses to interact with our web application. Read more about it here.

Run Server:
There’s no fun thing as that of visiting your own webpage, so let’s run our server which also generate a link for us to view our webpage

python manage.py runserver

This shows up…

python manage.py runserver 
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
July 12, 2017 - 15:19:01
Django version 1.8, using settings 'mask_off.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Notice the warning message about having unapplied migrations? Now let’s do a small but very important talk about migrations;

Making Migrations:
Migrations helps us make changes to our database schema without losing any data, each time we create a new model or make changes to a current one and run migrations, it helps update our database tables with the schemas without having to go through all the stress of dragging and recreating the database ourselves.

To make our migration:

python manage.py migrate

An output of this sort should show up:

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK

This implies a successful migration, Now we can successfully run our server with no issues python manage.py runserver . We get a success message on our webpage like the one below
alt text

Yaah! our very own webpage.

Now we have our server running and a ‘webpage’ , but django takes pleasure in reminding us we still have a lot of work to do before we can proudly call this a webpage.

The second part of this tutorial would contain; Creating a new app in our project, working with Urls, Templates, Creating views and Linking pages. For now, take out more time to go through the steps again and again to become more familiar with them. Only practice makes perfect!

Things learnt From this Tutorial:

  • Setting up a virtual environment(Downloading, Activiating Virtual env)
  • Installing Django
  • Creating a project
  • Basic project components
  • Migrations
  • Running Server

Encountered any issue along the line? Let me know! I’ll be glad to help

originally posted on my medium publication here

Top comments (13)

Collapse
 
dennisfen profile image
Denis Borisevich

Thanks for the tutorial, Ada! I'll definitely try it this weekend.

3) The WSGI (Web Server Gateway Interface) acts as the interface our web server uses to interact with our web application. Read more about it here.

There seems to be a lost link here.

Collapse
 
kolokodess profile image
Ada Nduka Oyom

Oh yes, just noticed, my mistake. I'll correct that

Collapse
 
codehakase profile image
Francis Sunday

Great Read!!!

Collapse
 
khomesh24 profile image
khomesh24

Its great, well explained. Looking forward for next tutorial on creating a new app.

Collapse
 
vberlier profile image
Valentin Berlier

Nice article! However, I wouldn't recommend using python 2 to introduce Django to beginners. It's 2017 and everyone should now be using python 3 (see pythonclock.org/)

Collapse
 
cotcotcoder profile image
JeffD

Hi, maybe the part : "Things learnt From this Tutorial:" could be more usefull at the begining of this article :)

Collapse
 
kolokodess profile image
Ada Nduka Oyom

Hi Jeff, great observation, would def. follow that method in my next articles. Thanks!

Collapse
 
phillie profile image
Philly • Edited

Oh yay!! I just came across your post and wow, this is great. Django in a nutshell. 😍

I'll def put you or rather your post on our PyLadies list of go-to-resources,if you don't mind. 😊

Collapse
 
kolokodess profile image
Ada Nduka Oyom

Thanks Rebecca! It would be my pleasure

Collapse
 
theodesp profile image
Theofanis Despoudis

Good job Ada!

Collapse
 
kolokodess profile image
Ada Nduka Oyom

Thank You!

Collapse
 
ben profile image
Ben Halpern

Encountered any issue along the line? Let me know! I’ll be glad to help

I have never worked in Django, but this tutorial and you are my go-to if I find myself in that world.

Collapse
 
kolokodess profile image
Ada Nduka Oyom

That would be really great, i'll be glad to put you through