0% found this document useful (0 votes)
35 views6 pages

Project Setup

The document outlines the steps to set up a Django project with a REST API application including creating a virtual environment, installing dependencies, initializing the project and app, defining serializers and views, and configuring URLs.

Uploaded by

alcatelxonetouch
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views6 pages

Project Setup

The document outlines the steps to set up a Django project with a REST API application including creating a virtual environment, installing dependencies, initializing the project and app, defining serializers and views, and configuring URLs.

Uploaded by

alcatelxonetouch
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Project setup

Create a new Django project named tutorial , then start a new app
called quickstart .

# Create the project directory

mkdir tutorial

cd tutorial

# Create a virtual environment to isolate our package dependencies locally

python3 -m venv env

source env/bin/activate # On Windows use `env\Scripts\activate`

# Install Django and Django REST framework into the virtual environment

pip install django

pip install djangorestframework

# Set up a new project with a single application

django-admin startproject tutorial . # Note the trailing '.' character

cd tutorial

django-admin startapp quickstart

cd ..

The project layout should look like:


$ pwd

<some path>/tutorial

$ find .

./tutorial

./tutorial/asgi.py

./tutorial/__init__.py

./tutorial/quickstart

./tutorial/quickstart/migrations

./tutorial/quickstart/migrations/__init__.py

./tutorial/quickstart/models.py

./tutorial/quickstart/__init__.py

./tutorial/quickstart/apps.py

./tutorial/quickstart/admin.py

./tutorial/quickstart/tests.py

./tutorial/quickstart/views.py

./tutorial/settings.py

./tutorial/urls.py

./tutorial/wsgi.py

./env

./env/...
./manage.py

It may look unusual that the application has been created within the project
directory. Using the project's namespace avoids name clashes with external
modules (a topic that goes outside the scope of the quickstart).

Now sync your database for the first time:

python manage.py migrate

We'll also create an initial user named admin with a password. We'll
authenticate as that user later in our example.

python manage.py createsuperuser --username admin --email [email protected]

Once you've set up a database and the initial user is created and ready to go,
open up the app's directory and we'll get coding...

Serializers
First up we're going to define some serializers. Let's create a new module
named tutorial/quickstart/serializers.py that we'll use for our data
representations.

from django.contrib.auth.models import Group, User

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']

Notice that we're using hyperlinked relations in this case


with HyperlinkedModelSerializer . You can also use primary key and various other
relationships, but hyperlinking is good RESTful design.

Views
Right, we'd better write some views then. Open tutorial/quickstart/views.py and
get typing.

from django.contrib.auth.models import Group, User

from rest_framework import permissions, viewsets

from tutorial.quickstart.serializers import GroupSerializer, UserSerializer

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().order_by('name')

serializer_class = GroupSerializer

permission_classes = [permissions.IsAuthenticated]

Rather than write multiple views we're grouping together all the common
behavior into classes called ViewSets .

We can easily break these down into individual views if we need to, but using
viewsets keeps the view logic nicely organized as well as being very concise.

URLs
Okay, now let's wire up the API URLs. On to tutorial/urls.py ...

from django.urls import include, path


from rest_framework import routers

from tutorial.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'))

You might also like