Django For Beginners - Project Setup P1
Tags: django, python, tutorial, beginners
Published: 2020-10-26 14:56:55

Django is a python web framework used to build web app and api services. Its comes under `Model Template Views` architectural pattern. Django is battery included tool, shipped with many built in feature like authentication, admin panel, session handling, ORM, etc.

#### Virtualenv
Advantage of using virtualenv is machine can have multiple django projects which are running in different version of django.

create Virtual environment using virtualenv
```
virtualenv --python=python3 venv
```
to know more about [Virtual environment](https://dev.to/magesh236/setup-python-virtual-environment-2ad8)

#### Activate Virtual environment

This command will work on bith Mac and Linux
```
source venv/bin/activate
```

Use this to activate on Windows
```
venv\Scripts\activate
```

To deactivate Virtual environment, this command common for all the platforms
```
deactivate
```

#### Install Django
After activating the virtual environment install the latest django version in venv
```
pip install django
```

To check django is installed, list the pip packages, this command will list all the installed packages in venv
```
pip freeze
```

or you can check by entering this command in terminal. if django installed, you should see the version of your installation.
```
python -m django --version
```

## Creating a project

Commad will create a project called `mysite`, its just a directory. `mysite` will act as the `root` directory for the project.
```
django-admin startproject mysite
```
```
mysite/ ---> root directory
    manage.py
    mysite/ ---> django package directory
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
```

Alternative command, both do the same process with a small difference. Dot `.` will create the project at the at location from where the command is being executed. Then the directory will act as root directory
```
django-admin startproject mysite .
```

Now lets check the project, go to the root directory and run this command to start the django project
```
python manage.py runserver
```

Above one will run the django in `http://127.0.0.1:8000/` Ip and port, we can change the running ip and port.
```
python manage.py runserver 192.168.43.135:8080
```
This will run the project in `http://192.168.43.135:8080`

```
runserver 192.168.43.135:8080
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 26, 2020 - 19:25:29
Django version 3.1.2, using settings 'mysite.settings'
Starting development server at http://192.168.43.135:8080/
Quit the server with CTRL-BREAK.
```

Open the link in browser with http://192.168.43.135:8080/, you will get an error this is because you need to add the ip in allowed host in settings.py.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bf66e5uniac3u0lvoko0.PNG)

For now use the default `127.0.0.1`, run the project
```
python manage.py runserver
```
```
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 26, 2020 - 19:38:32
Django version 3.1.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/fni2dyikqz19honwcc14.gif)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/krady47th10dawujvju2.PNG)


#### ???
You have 18 unapplied migration(s).

Django shipped with build in feature like admin page, session, auth for that it has to apply the migration table to the DB.

`By default django shipped with SQlite DB.`

Lets apply the migrate to the database
```
python manage.py migrate
```

You can see default table structure are applied to SQlite database
```
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... 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 auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
```

Thanks you, have a great day ahead.😎