# 0 get python on Windows
1. Download the installer from here: https://www.python.org/downloads/
# 1. getting pip on Windows
1. save this file: https://bootstrap.pypa.io/get-pip.py
2. run `python get-pip.py` on a powershell window where you saved the downloaded file
# 2. Install Django and Django Rest Framework
1. `pip install Django`
2. `pip install djangorestframework`
# 3. Create a `requirements.txt` file
```
Django==4.2.3
djangorestframework==3.14.0
pyscopg2
```
# 4. Create a `Dockerfile`
```
FROM python:3.11.4-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /tutorial
COPY ./requirements.txt .
RUN apt-get update \
&& apt-get -y install libpq-dev gcc
RUN pip install -r requirements.txt
COPY . .
```
# 5. within VS Code Terminal
```
PS C:\Users\...\webdevt\tutorial> python -m django startproject tutorial .
PS C:\Users\...\webdevt\tutorial> python -m django startapp quickstart
```
# 6. Create `docker-compose.yml`
```
version: "3"
services:
api:
build: .
ports:
- "8000:8000"
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/tutorial
depends_on:
- db
db:
image: postgres:13-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data:
```
# 7. within VS Code Terminal
```
PS C:\Users\...\webdevt\tutorial> docker-compose up -d
```
# 8. Code changes
`quickstart/serializers.py` (add new file)
```
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
```
`quickstart/views.py` (modify file)
```
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
```
`tutorial/urls.py` (modify file)
```
from django.urls import include, path
from rest_framework import routers
from quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
```
`tutorial/settings.py` (add at the bottom)
```
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
```
`tutorial/settings.py` (modify INSTALLED_APPS)
```
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'quickstart',
]
```
# 9. Create superuser (inside VS Code Terminal)
`docker-compose exec -ti api bash`
`python manage.py migrate`
`python manage.py createsuperuser --email admin@example.com --username admin`
**set the password to "password123"**