# Extending Project Zero

## <mark style="color:red;">Django App or Package: Understanding Its Function​</mark> <a href="#django-app-or-package-understanding-its-function" id="django-app-or-package-understanding-its-function"></a>

Django applications are parts of a django project. When developing a project, the project is divided into meaningful parts and the app is created for each part so that the complexity within the project is minimized and these parts of the application can be reused. You can follow the steps below to create a Django application.

Go to the project directory and run the following line of code.

```
$ python manage.py startapp demo
```

We created our application with the line of code that was run. Now let's examine the structure of the created application.

```
demo/
    __init__.py
    admin.py
    apps.py
    migrations/
    __init__.py
    models.py
    tests.py
    views.py
```

**Init.py:** The init file is a file that indicates that the folder it belongs to is a python module.

**Admin.py:** Admin file is the file containing the settings related to the management panel. When we create a model, we use this file to provide the management interface of the model.

**App.py:** App file is the file containing the settings related to the application.

**Models.py:** The models file is the layer where we create database objects and query.

**Test.py:** This is a file used for testing.

**Views.py:** The views file is the file in which we will write python functions related to views.

**Migrations Directory:** This folder is the folder that will hold the database structure of the application.

## <mark style="color:red;">Apps in Project Zero​</mark> <a href="#apps-in-project-zero" id="apps-in-project-zero"></a>

In Project Zero, we can add new features to the project by including packages such as **pz\_otp**, **pz\_click\_and\_collect**, **pz\_list\_variants**, **pz\_pay\_on\_delivery**. You can examine these packages in detail from the links below.

**Click and collect​**

This app enables retail store delivery option.

[Click here for details.](https://bitbucket.org/akinonteam/pz_click_collect/src/master/)

**List variants​​**

[Click here for details.](https://bitbucket.org/akinonteam/pz_list_variants/src/master/)

**OTP​**

​This app enables SMS verification (OTP) support for desired actions, such as registration and updating profile information.

[Click here for details.](https://bitbucket.org/akinonteam/pz_otp/src/master/)

**Pay on delivery​**

A library module for enabling "Pay On Delivery" payment module at order/payment step.

It doesn't work in projects where the "Pay On Delivery" feature is not active.

[Click here for details.](https://bitbucket.org/akinonteam/pz_pay_on_delivery/src/master/)

**Delete And Add To Favourites​**

When the user wants to delete a product on the cart page, this package prompts the user to add the product to favorite products by popping up a dialog.

[Click here for details.](https://bitbucket.org/akinonteam/pz_delete_add_favourite/src/master/)

## <mark style="color:red;">Installing Apps​</mark> <a href="#installing-apps" id="installing-apps"></a>

Installing each package may differ. How to install the package is explained in detail in Git repositories. As an example, the installation of the Pz otp package and its use in the project are shown below.

Create a file named requirements.txt in the project directory and add the following line to this file.

```
-e git+ssh://git@[bitbucket.org/akinonteam/pz_otp.git@15f3121#egg=pz_otp](http://bitbucket.org/akinonteam/pz_otp.git@15f3121#egg=pz_otp)
```

Then run the command below to install the package.

***in\*\*\*\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*`venv`***

```
pip install -r requirements.txt
```

Install the npm package.

***in\*\*\*\* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*`/templates`***

```
yarn add ​git+ssh://git@bitbucket.org:akinonteam/pz_otp.git#15f3121
```

Add to the project.

*`omnife_base/settings.py`*

```
INSTALLED_APPS.append('pz_otp')
```

Add it to the HTML file you want to use.

```
{%  from  'pz_otp/index.html'  import  OTPModal  %}

{{  OTPModal()  }}
```

Add and initialize in javascript file.

```
import PzOTP from 'pz_otp';

// ...

new PzOTP({
    formSelector:  '.js-otp-form'
});
```

Import styles.

```
@import  "~pz_otp/";
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.akinon.com/technical-guides/project-zero/django/extending-project-zero.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
