# Creating a Project In Django

So far we learn and understand what exactly **Django** is and *how it works*. Now let us build a cool app (project) in Django. We will learn, Django by building a *Social Media app*. So let's get started with the tutorial.

## Let's learn by example.

Throughout this tutorial, we'll walk you through the creation of a basic Social Media application.

It'll consist of 4 parts:

-   An authentication system in Django (login, signup, logout).
-   A public site that lets people view posts and let an authenticated user to create posts
-   An admin site that lets you add, change, and delete posts.
-   Hosting your first Social Media website over internet on pythonanywhere.com

We'll assume you have [Django installed](https://www.teachmebro.com/post/53) already. You can tell Django is installed and which version by running the following command in a shell prompt.

### Linux/Mac:

```
python -m django --version
```

### Windows:

```
py -m django --version
```

If Django is installed, you should see the version of your installation. If it isn't, you'll get an error telling "No module named django".

Creating a project [¶](https://docs.djangoproject.com/en/3.0/intro/tutorial01/#creating-a-project "Permalink to this headline")
------------------------------------------------------------------------------------------------------------------------------

Whether you are on Windows or Linux, From the command line, `cd` into a directory where you'd like to store your code, then run the following command:

```
django-admin startproject social
```

This will create a `social directory` in your current directory. This directory will consist of an `initial setup` to build the website -- a collection of settings for an instance of Django, including database configuration, Django-specific options, and application-specific settings.

The Project Structure
---------------------

Let's look at what `startproject` created:

```
social/
    manage.py
    social/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
```

These files are:

-   The outer **`social/`** root directory is a container for your project. Its name doesn't matter to Django; you can rename it to anything you like.
-   **`manage.py`:** A command-line utility that lets you interact with this Django project in various ways.
-   The inner** `social/`** directory is the actual Python package for your project. Its name is the Python package name you'll need to use to import anything inside it (e.g. `myblog.urls`).
-   **`social/__init__.py`:** An empty file that tells Python that this directory should be considered a Python package.
-   **`social/settings.py`:** Settings/configuration for this Django project. Django settings will tell you all about how settings work.
-   `**social/urls.py**`**:** The URL declarations for this Django project; a "table of contents" of your Django-powered site.
-   **`social/asgi.py`:** An entry-point for ASGI-compatible web servers to serve your project. 
-   **`social/wsgi.py`:** An entry-point for WSGI-compatible web servers to serve your project. 

The development server [¶](https://docs.djangoproject.com/en/3.0/intro/tutorial01/#the-development-server "Permalink to this headline")
--------------------------------------------------------------------------------------------------------------------------------------

Let's verify your `Django project works`. Change into the outer `social` directory, if you haven't already, and run the following commands:

```
python manage.py runserver
```

You'll see the following output on the command line:

```
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.

February 03, 2020 - 15:50:53
Django version 2.1.7, using settings 'social.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```

### Note

> 
Ignore the warning about unapplied database migrations for now; we'll deal with the database shortly.

Now that the server's running, visit <http://127.0.0.1:8000/> with your Web browser. You'll see a `"Congratulations!"` page, with a rocket taking off. It worked!

​
