diff --git a/Django REST Framework Guide/1_Setup.md b/Django REST Framework Guide/1_Setup.md index 0ea129f..926b716 100644 --- a/Django REST Framework Guide/1_Setup.md +++ b/Django REST Framework Guide/1_Setup.md @@ -20,7 +20,7 @@ You will need to install the latest version of Python (version 3.11.2 as of 2/19 [https://www.python.org/downloads/](https://www.python.org/downloads/ "https://www.python.org/downloads/") -During the installation, make sure to check **Add Python 3.x to PATH** +During the installation, make sure to check **Add Python 3.x to PATH** ![[_resources/1_Setup/373ea207d1abd6f0a734506d8ab4acbc_MD5.jpg]] diff --git a/Django REST Framework Guide/2_Initialize_Your_First_Project.md b/Django REST Framework Guide/2_Initialize_Your_First_Project.md index 843c06f..2faa126 100644 --- a/Django REST Framework Guide/2_Initialize_Your_First_Project.md +++ b/Django REST Framework Guide/2_Initialize_Your_First_Project.md @@ -30,19 +30,21 @@ We previously installed Git, now's the time to use it. In your terminal, run the ![[_resources/2_Initialize_Your_First_Project/765336c9701ec47364bcd428b580e1ce_MD5.jpg]] -If successful, this will create a hidden .git folder in your project +If successful, this will create a hidden `.git` folder in your project ![[_resources/2_Initialize_Your_First_Project/f1c979f796fda6b41f83a37744b469e2_MD5.jpg]] There are some files in your projects that won't need to be tracked for changes (database files, and passwords!) +\ +Download the `gitignore` below and rename it to `.gitignore`. You can then drop it into your root project folder +![[_resources/2_Initialize_Your_First_Project/gitignore]] -Download the gitignore file [here](https://fileserver.06222001.xyz/files/Bookstack/gitignore) below and drop it into your project's folder ![[_resources/2_Initialize_Your_First_Project/d5a36b65d64255b05bc81a1709ca1158_MD5.jpg]] -Make sure to rename this to **.gitignore** (take note of the dot before the filename!) +Don't forget to rename it to `.gitignore`. Take note of the dot before the filename! -You can also choose to search for your own .gitignore template online for Django, whichever suits best for you. +You can also choose to search for your own `.gitignore` template online for Django or Python which will work fine too. ### Select your Interpreter @@ -52,7 +54,7 @@ Press **CTRL + Shift + P** to open the VSCode menu and type in **Select Interpre ![[_resources/2_Initialize_Your_First_Project/d4da2b316a92c4444c01272187355abd_MD5.jpg]] -Select the virtual Python environment you created earlier (eg. the one created from **pipenv shell)** +Select the virtual Python environment you created earlier (eg. the one created from `pipenv shell`) ![[_resources/2_Initialize_Your_First_Project/9d0f73aa1a1929a62a482e23bf2e94b5_MD5.jpg]] @@ -76,13 +78,13 @@ In your code editor's terminal or command prompt, run the command ![[_resources/2_Initialize_Your_First_Project/9fa2115388cde426285a656a7e9965d5_MD5.jpg]]](https://bookstack.06222001.xyz/uploads/images/gallery/2024-09/i5bimage.png) -Be sure to replace it with your own project name! I named mine **djangobackend**. +Be sure to replace it with your own project name! I named mine `djangobackend`. A new directory will be created, containing your Django project's files [![[_resources/2_Initialize_Your_First_Project/a137cf212011825e092997818ff20658_MD5.jpg]] -Change your directory in the terminal to the folder just created eg. **cd PROJECT\_NAME** +Change your directory in the terminal to the folder just created eg. `cd PROJECT\_NAME` ![[_resources/2_Initialize_Your_First_Project/ab38fdac55d8d6331471d609707dfdb9_MD5.jpg]] diff --git a/Django REST Framework Guide/3_Project_Structure.md b/Django REST Framework Guide/3_Project_Structure.md index 277a42a..8477231 100644 --- a/Django REST Framework Guide/3_Project_Structure.md +++ b/Django REST Framework Guide/3_Project_Structure.md @@ -15,16 +15,16 @@ The folder immediately proceeding your first one contains your Django project, c This contains the following -- `manage.py` - the entry point to your Django app (e.g. the `python manage.py runserver` command and such) -- `db.sqlite3` - the default database file for Django, which uses [SQLite](https://www.sqlite.org/) (you can switch to PostgreSQL or MySQL later on) -- another folder which contains your project's main config or app +- `manage.py` - The entry point to your Django app (e.g. the `python manage.py runserver` command and such) +- `db.sqlite3` - The default database file for Django, which uses [SQLite](https://www.sqlite.org/) (you can switch to PostgreSQL or MySQL later on) +- Another folder which contains your project's main config or app #### Django Apps Django divides your projects into groups called apps. When you start a new project, you start off with your first app. -In this case, my first app is named **djangobackend** +In this case, my first app is named `djangobackend` ![[_resources/3_Project_Structure/1f40b8e177d08862762cffe20f01e38f_MD5.jpg]] @@ -34,11 +34,11 @@ That seems a bit confusing doesn't it? To make things clearer, you can opt to rename the main app of your Django project. These are the changes you must make -- Rename the main app folder to **config** +- Rename the main app folder to `config` ![[_resources/3_Project_Structure/bd12032f298e0a3e9d7c12999b231b77_MD5.jpg]] -- Open `asgi.py` and change line 14 to point to **config.settings** instead of **PROJECT\_NAME.settings** +- Open `asgi.py` and change line 14 to point to **config.settings** instead of **PROJECT_NAME.settings** ![[_resources/3_Project_Structure/9a3064d2cb4d17b632358d10dfbdcc22_MD5.jpg]] @@ -46,15 +46,15 @@ To make things clearer, you can opt to rename the main app of your Django projec ![[_resources/3_Project_Structure/6846e765a92401a0768a60fab29151f9_MD5.jpg]] -- Go to `settings.py` and set **ROOT\_URLCONF** in line 52 to **config.urls** instead of **PROJECT\_NAME.urls** +- Go to `settings.py` and set **ROOT_URLCONF** in line 52 to **config.urls** instead of **PROJECT_NAME.urls** ![[_resources/3_Project_Structure/8a0ab212600d24de9fb70656e810e603_MD5.jpg]] -- Do the same for **WSGI\_APPLICATION** in `settings.py`, line 70 +- Do the same for **WSGI_APPLICATION** in `settings.py`, line 70 ![[_resources/3_Project_Structure/42ab80ce78c1158e8af47ddf9631c027_MD5.jpg]] -- In `manage.py`, change line 19 to point to **config.settings** instead of **PROJECT\_NAME.settings** +- In `manage.py`, change line 19 to point to **config.settings** instead of **PROJECT_NAME.settings** [![[_resources/3_Project_Structure/29904325362d967d3e9fe79941ae3589_MD5.jpg]] @@ -72,11 +72,11 @@ Your current setup only includes Django. To proceed with Django REST Framework, You've already installed Django REST Framework in the previous steps (e.g. `pipenv install django djangorestframework`). -To register it as an app in our project. Open your **settings.py** file and look for the **INSTALLED\_APPS** section +To register it as an app in our project. Open your `settings.py` file and look for the **INSTALLED_APPS** section ![[_resources/3_Project_Structure/5bc2f2801c226ade60ad52496486ff78_MD5.jpg]] -Add **rest\_framework** to **INSTALLED\_APPS** +Add **rest_framework** to **INSTALLED_APPS** ![[_resources/3_Project_Structure/c327ae10edcfd245d0ad4cfe787bf9ae_MD5.jpg]] diff --git a/Django REST Framework Guide/4_REST_Framework_Setup.md b/Django REST Framework Guide/4_REST_Framework_Setup.md new file mode 100644 index 0000000..9c8f82e --- /dev/null +++ b/Django REST Framework Guide/4_REST_Framework_Setup.md @@ -0,0 +1,57 @@ +# REST Framework Setup + +### API App + +When writing backend APIs, you make changes to your app that may not be compatible with older versions. + +Examples of these include the following; + +- You changed what should be sent to your login API in order to authenticate with a newer version of your backend +- When requesting books from your database, a newer version of your API may return a different format (XML instead of JSON) + +You should take this into account when building a new project, otherwise users on older versions may encounter errors. + +![[_resources/4_REST_Framework_Setup/3b993b4fb30752dbd22c157c4c852f82_MD5.jpg]] + +This lets you allow users on older versions to still use your app (v1) while allowing newer users without any overlap (v2) + +We will structure your project in the same manner as above. Create a folder named `api` in your Django project folder besides **config** + +![[_resources/4_REST_Framework_Setup/e4b384b960e31b256a53775aa6f61ff2_MD5.jpg]] + +Create the following files inside the `api` folder + +- `__init__.py` +- `urls.py` + +![[_resources/4_REST_Framework_Setup/8357583c43ac252db3811fcc35f21564_MD5.jpg]] +Leave **\_\_init\_\_.py** blank. Instead, open **urls.py** and add the following code + +```python +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] +``` + +We will then need to point the main config's url file **(url.py)** to the one we just created. Open the **urls.py** file in the **config** folder, replace it with the following + +```python +from django.urls import path, include + +urlpatterns = [ + path('api/v1/', include('api.urls')), +] +``` + +Your setup should then look like this + +[![[_resources/4_REST_Framework_Setup/8a1e35b34d95be992bd550b32bfe03fa_MD5.jpg]]](https://bookstack.06222001.xyz/uploads/images/gallery/2024-09/2gZimage.png) + +[![[_resources/4_REST_Framework_Setup/f9a1c18b83ca805afb4662e6ba43eca2_MD5.jpg]]](https://bookstack.06222001.xyz/uploads/images/gallery/2024-09/70bimage.png) + +There is no need to include the **api** app in your **INSTALLED\_APPS (config/settings.py)** + +The next section will handle users and authentication \ No newline at end of file diff --git a/Django REST Framework Guide/_resources/2_Initialize_Your_First_Project/gitignore b/Django REST Framework Guide/_resources/2_Initialize_Your_First_Project/gitignore new file mode 100644 index 0000000..6ad57f3 --- /dev/null +++ b/Django REST Framework Guide/_resources/2_Initialize_Your_First_Project/gitignore @@ -0,0 +1,162 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal +static/ +media/ + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/Django REST Framework Guide/_resources/4_REST_Framework_Setup/3b993b4fb30752dbd22c157c4c852f82_MD5.jpg b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/3b993b4fb30752dbd22c157c4c852f82_MD5.jpg new file mode 100644 index 0000000..3dcb0e6 Binary files /dev/null and b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/3b993b4fb30752dbd22c157c4c852f82_MD5.jpg differ diff --git a/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8357583c43ac252db3811fcc35f21564_MD5.jpg b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8357583c43ac252db3811fcc35f21564_MD5.jpg new file mode 100644 index 0000000..af979a8 Binary files /dev/null and b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8357583c43ac252db3811fcc35f21564_MD5.jpg differ diff --git a/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8a1e35b34d95be992bd550b32bfe03fa_MD5.jpg b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8a1e35b34d95be992bd550b32bfe03fa_MD5.jpg new file mode 100644 index 0000000..80cd248 Binary files /dev/null and b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/8a1e35b34d95be992bd550b32bfe03fa_MD5.jpg differ diff --git a/Django REST Framework Guide/_resources/4_REST_Framework_Setup/e4b384b960e31b256a53775aa6f61ff2_MD5.jpg b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/e4b384b960e31b256a53775aa6f61ff2_MD5.jpg new file mode 100644 index 0000000..1357064 Binary files /dev/null and b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/e4b384b960e31b256a53775aa6f61ff2_MD5.jpg differ diff --git a/Django REST Framework Guide/_resources/4_REST_Framework_Setup/f9a1c18b83ca805afb4662e6ba43eca2_MD5.jpg b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/f9a1c18b83ca805afb4662e6ba43eca2_MD5.jpg new file mode 100644 index 0000000..fc76578 Binary files /dev/null and b/Django REST Framework Guide/_resources/4_REST_Framework_Setup/f9a1c18b83ca805afb4662e6ba43eca2_MD5.jpg differ diff --git a/README.md b/README.md index 9a33b19..0361ade 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,6 @@ - [Perlite Web Instance](https://notes.06222001.xyz) - [GitHub Repository](https://github.com/lemeow125/Notes) - [Gitea Repository Mirror](https://git.06222001.xyz/keannu125/Notes) + +### Notes +- [[Django REST Framework Guide/1_Setup|Django REST Framework Setup]] \ No newline at end of file