# Building Educational CMS API - Part 1: Project Setup

I started to build an API using Django and I will be documenting all the processes that I go through for myself and maybe others who are interested.

In this article, we'll go through what I have done so far and explain them as we go. Before that let me quickly introduce the project's main goal.

> Link to repository: [github@khasizadaj/edu\_cms\_api](https://github.com/khasizadaj/edu_cms_api)

## Introduction

Educational Content Management System API (from now on `edu_cms_api`) is going to be an API designed for course creation, student enrollment, quiz administration, and progress tracking.

> This reminds me good old Quizzen than I attempted to build few years back... 🥹 It failed successfully :) You can have a look at its still existing LinkedIn page from [this link](https://www.linkedin.com/company/quizzen). Those days were amazing!

## Updates: Project Setup

At the moment I have only worked on project setup and initial documentation of the project. As I want to experiment further with `Django`, that's gonna be our web framework of choice. Because I am building an API, `djangorestframework` library was the man of the show in that regard. It has lots of built-in functionalities that make creating API much easier.

Other changes are development related and they consist of:

* `poetry`: to manage dependencies
    
* `mypy`: to apply static type checking to the codebase
    
* `flake8` & `black`: for linting and code formatting
    
* `pre-commit`: to enforce linting and code formatting before every commit
    
* `unittest`: to test the project (Note: It's a built-in package)
    
* `python-dotenv`: to manage environment variables
    

> You can refer to [`REAADME.md`](http://REAADME.md) file of the project to see how you can run the project locally.

## Conclusion

This was a summary of the changes I made to the project. From time to time I will come to you with new updates! See you in the next part. Ciao!

## References

1. [What is poetry?](https://www.linkedin.com/posts/javid-khasizada_how-to-create-and-use-virtual-environments-activity-7150776234816274432-BhNg?utm_source=share&utm_medium=member_desktop)
    
2. `dotenv`
    
    1. [What is `dotenv`](https://www.linkedin.com/posts/javid-khasizada_enhance-your-python-projects-by-integrating-activity-7151161275740270592-mWJ7?utm_source=share&utm_medium=member_desktop)
        
    2. [`dotenv` tutorial by "neuralink"](https://youtu.be/8dlQ_nDE7dQ?si=upzPQ3M9XeN1UkZU)
        
3. [The easy way to keep your repos tidy, i.e. `pre-commit`](https://youtu.be/psjz6rwzMdk?si=w66onpSQkUi19Vcv)
