Apps in Django and starting with Views

Each application you write in Django consists of a Python package that follows a certain convention. Django comes with a utility that automatically generates the basic directory structure of an app, so you can focus on writing code rather than creating directories.

Taken from docs.djangoproject.com/en/3.1/intro/tutoria..

An app is a Web application that does something – e.g., a Weblog system, a database of public records or a small poll app. A project is a collection of configuration and apps for a particular website. A project can contain multiple apps. An app can be in multiple projects.

Creating a Blogs App

So, like mentioned above, Django comes with a utility that automatically generated the basic directory structure of an app. So, to do that, run the following in the terminal

python3 manage.py startapp blogs

Now, your folder structure should be like follows

.
├── blogs
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── livecode247
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   ├── settings.cpython-38.pyc
│   │   ├── urls.cpython-38.pyc
│   │   └── wsgi.cpython-38.pyc
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Now, to make Django know, that we have created an app and we want it to be recognised by the project, we go to settings.py and update the INSTALLED_APPS variable to look like this

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blogs', ## New Line
]

Writing your first view

Write the following in the blogs/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello")

So, first of all we are important HttpResponse class from django.http module. This is basically to give a response when a person hits the url which we are going to map in the just a second.

Then we create a function called index which takes in a parameter called request by default. This is needed for a lot of stuff, like finding URL Params, request body etc.

Then inside the function we return a HttpResponse of Hello

Mapping our url

To call the view, we need to map it to a URL - and for this we need a URLconf.

To create a URLconf in the polls directory, create a file called urls.py. Your app directory should now look like this

.
├── blogs
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   ├── admin.cpython-38.pyc
│   │   └── models.cpython-38.pyc
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       └── __init__.cpython-38.pyc
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db.sqlite3
├── livecode247
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   ├── settings.cpython-38.pyc
│   │   ├── urls.cpython-38.pyc
│   │   └── wsgi.cpython-38.pyc
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

In the blogs/urls.py add the following code

from django.urls import path
from . import views

urlpatterns = [
    path("/", views.index, name="index"),
]
  1. In line 1, we are importing path function from django.urls module
  2. In line 2, we are importing views.py from . (which means the current directory)
  3. In line 4, we set a variable called urlpatterns. This is a default vriable which Django looks for to set urls
  4. In line 5, we set a path, with url as "/" (that basically yourwebsite.com) which points to index function inside views.py which we set some time ago, and then we give it a name. Naming URL's is pretty useful in Django which we'll see when we start making templates

Include URL

Notice that there is a urls.py file inside the livecode247 directory as well. That is an autogenerated file made by Django. What we need to do is include our urls inside blogs app inside this so that Django knows that it needs to use those urls for a specific path. We can do that as follows

  1. Add include as an import from django.urls. So your line 17 should look like this

    from django.urls import path, include
    
  2. Add a path as follows

    path("blogs/", include('blogs.urls')),
    

    So, what we are doing is, that when a person hits the blogs route like 127.0.0.1:8000/blogs we make Django use the urls.py file inside blogs app.

So, now if we go to 127.0.0.1:8000/blogs you should see this

Screenshot 2020-12-29 at 1.05.22 AM.jpg

That's it for this episode! In the next one we are going to talk about how to use models and setup our sqlite database! Till then, Stay Tuned!