
Discover essential tools for building a production-ready API: hosting and database on Heroku, media storage on Google Cloud, debugging with Postman, and collaborative planning with Trello.
Explore how HTTP request methods enable client–server communication, focusing on post, put, delete, and patch to create, replace, delete, and partially update resources such as user data.
Explore http status codes and their role in web and api development, from 201 created responses and 200 ok to 404 not found, 4xx client errors, and 5xx server errors.
Explore the Django Rest Framework API overview, detailing user management, authentication with JWT and Google login, and core endpoints for users, profiles, houses, tasks, and attachments.
Install Python on macOS and Unix-based systems, create and activate a virtual environment with virtualenv, and install Django in the isolated environment to prepare a Python rest API project.
Learn to create a Django project with django-admin startproject, set up a virtual environment, install Django, organize folders, run the server with manage.py, and begin integrating the rest framework.
Open the project in Visual Studio Code, activate virtual environment, and run the Django development server; adjust settings.py and allowed hosts, and use manage.py with a sqlite database for development.
Explore how the Django ORM simplifies working with a SQL database by defining models and migrations. Create a super user and access the admin panel, and troubleshoot common migration errors.
Explore how the Django administration panel lets you interact with data for configured models via auto-generated forms. Manage users and groups by adding, editing, deleting, filtering, and searching in admin.
Create a user app and profile model in Django, linking profiles to users with a one-to-one relation, adding image fields, migrations, and admin enhancements for clear admin display.
Automate user profile creation in Django with signals, post_save, and a receiver to create a profile whenever a new user is created.
Activate your environment and install Django REST framework, markdown, and django-filter, then add REST framework to apps. Create a user model serializer with id, username, email, first_name, last_name.
Define a user viewset by inheriting from model viewset with all users and the user serializer. Register the routes with a router.
Create a router in the users app using the REST framework. Register the UserViewSet to the users endpoint and map URLs to the router, using the serializer for model instances.
Define the API router, register the accounts endpoint under /api/accounts, and include the user routes to expose the API with serializers and viewsets.
Extend the user serializer with a write-only password field and implement a secure create method to create a new user via a post to the accounts/users endpoint.
Learn how to automate user name generation in a Django REST API using signals before save, enforce unique, lowercase usernames derived from first and last names, and prevent user edits.
Define global and view-level permissions in a REST API. Apply is authenticated or read-only globally, then create a user-owner get-and-post-only permission to override defaults on a view set.
Enable session-based authentication for a Django REST framework API by wiring login and logout views, configuring authentication classes, and exposing browsable API endpoints in debug mode.
Learn to implement token-based authentication with JWT in a Django REST framework project, using django-rest-framework-social-oauth2 to support OAuth providers for web and mobile clients.
Test token-based authentication using the Django toolkit, create an application with client id and secret, request a password-based grant to obtain access and refresh tokens.
Extend the user serializer update to allow password changes by validating the old password with check_password and setting the new one with set_password, and delegate fields to the base update.
Implement a serializer-wide validate function to conditionally require password and old password based on the request method, raising clear validation errors when data is missing.
Create a profile serializer and viewset to expose user profiles via a dedicated profiles endpoint, then embed a read-only hyperlinked user field in the user serializer for clear navigation.
Define profile owner read-only permissions and enforce object-level checks so only owners may update their profiles, while allowing safe reads; refine the profile viewset using retrieve and update mixins.
Explore how the user app's endpoints enforce permissions to edit only owned profiles, enable user registration and password changes, and implement authentication and token-based access in the Django REST API.
Create the house app for the general risk framework API, with a hostas endpoint listing houses, members, and tasks, and support join, leave, and remove member actions under role-based permissions.
Create a Django house model with name and image, a custom uid primary key, created_on, and points, completed_parsecs_count, not_completed_tasks_count; link a one-to-one manager to the profile.
Create a house serializer in serializers.py using model serializer, linking to the house model and exposing fields like id, image, name, created_on, manager, description, members_count, members, points, completed_tasks_count, and not_completed_tasks_count.
Create a house viewset by defining a house model, house serializer, and a custom is_house_manager_or_none permission class, implementing has_permission and has_object_permission with safe method checks and anonymous user handling.
Define the default router for the house app, connect its viewset to endpoints for accounts and slideshows, and include the router in the main API.
Test the implemented functionality by creating two houses, Gryffindor and Slithering, via admin and API, register the house model, and set read-only fields id and created on.
Implement a one-to-many house membership system by linking profiles to houses via a foreign key, exposing members and a manager via hyperlinked fields in the DRF serializer.
Define custom join and leave actions on a house viewset to manage user membership via the API endpoints, using rest framework decorators and post requests, with appropriate responses.
Test the join and leave actions for the house viewset with postman, override permissions to allow any user to join or leave, authenticate with tokens, and verify membership logic.
Implement a custom remove_member action in a Django REST API to let house managers remove members by user id, with post requests, permissions, and error handling.
Configure Django to save media locally by setting a media route and URL, and test uploads via the admin panel to ensure local media serves correctly.
Explore the APF framework's Tasca module by viewing and managing houses, their points, completed tasks, members, and the house manager, with privilege-based data changes and join/leave functionality.
Build the task app module of the Django REST API by adding endpoints for task lists, tasks, and attachments, linking houses to their task lists, and tracking completion.
Create a Django task model in the task app with created_on, completed_on (nullable), created_by and completed_by foreign keys to user profiles, name, description, and status NC/C with created_tasks and complete_tasks.
Model architecture for a Django REST API: link houses to task lists and tasks to attachments, with cascade deletes, created by, and a UUID-based attachment path.
Define task list and attachment models, extend the task model with a task list field, apply migrations with a one-off default, and create a list, a task, and an attachment.
Create the task list serializer for the api, define fields like url, id, name, description, status, created_on, and house with a hyperlinked relation, and set read-only fields.
Build a task list viewset in a Django REST framework project by wiring models, serializers, and a creator-based edit permission, and defining queryset and router.
Create a default task router, register the Paschalis user to expose a resourceful task list api, and wire the routes through the task api router to make the endpoint accessible.
Create task and attachment serializers in Django REST framework, including hyperlinked created by and completed by fields, task list linkage, and a supporting attachment serializer.
Create the task viewset and its serializer linked to the task model, implement is_allowed_to_edit_task to restrict access by house, and add the attachment viewset with its serializer.
Update the task app router to expose tasks and attachments via viewsets, with a custom get_queryset that filters by user profile.
Update Django REST framework serializers and viewsets to expose related tasks and attachments via hyperlinked related fields, with read-only, many relationships, across endpoints.
Implement custom validation in the task serializer to ensure the task_list belongs to the user's house, and override create to set created_by and save the task.
Implement custom validation in the attachment serializer to ensure users can only attach files to tasks in houses they belong to, using user profile context and task checks.
Implement Django signals to auto update house points when a task status becomes completed, and update the task list status to completed when all tasks are completed.
Implement a custom task status update endpoint in a Django REST framework viewset, using a patch action to toggle between complete and not complete and update completion metadata.
Fix a small issue by making the task status read-only in the serializer, and review the Django REST API endpoints for tasks, attachments, and task lists with house-based permissions.
Learn to add robust filtering to a Django REST framework API using Django-filter, configure backends and filter sets, and filter task status and house members via query parameters.
Implement text-based search in the house viewset using the rest framework's search filter, enabling name and description queries. Explore exact-match behavior with an equals sign and examples like gryffindor.
Implement ordering functionality in the api by adding a filters package ordering filter and a list of fields such as points and complete_task status to sort results ascending or descending.
Integrate Google Cloud Storage with a Django API to store and serve media files for a Heroku deployed app, using a Google project, bucket, service account, and Django storage.
Implement background jobs in a Django app to periodically compute house statistics. Schedule a calculate_house_stats task with django-background-tasks and run it via manage.py process_tasks.
Learn to connect a Django REST API to a PostgreSQL database hosted on Heroku, configure settings for PostgreSQL, install psycopg2, provision migrations, and run the app in production.
Initialize Git in the source folder, commit changes, connect to Heroku, create a proc file, install unicorn and white noise, configure settings and middleware, and test the deployment.
Learn how to deploy a Django REST API to Heroku, including creating a requirements.txt, freezing packages, configuring static files, and resolving deployment issues.
Do you want to build a complete Python RESTful API that is not only secure and stable but also deployed to a production ready environment ready to serve thousands of users? If Yes! Then this is the course for you!
WHAT WILL WE BE BUILDING?
In this course, we’ll use the best in Python and Django Rest Framework to build a complete REST API from scratch to deployment called Taskly that you can consume with any frontend framework of your choice.
WHAT CONCEPTS ARE COVERED?
JWT and OAUTH-2 Based Authentication
Support for Filtering and Text Based Searching
Create, Read, Update, Delete Functionality
Protecting and Permissioning Routes
Defining Custom Permissions For Users
Uploading and Sharing Of Media Files
Background Jobs
Django Signals
PostgresSQL and SQLite Databases alongside Django ORM
Throttling and Pagination Support
Deploying Django REST API to a Production Environment (Heroku)
Use Google Cloud Storage as Media Storage Solution (CDN).
Use Postman for testing REST API.
Tons of Practical, Straightforward and Repeatable App-Building Patterns
And much more!
WHAT ELSE DOES THIS COURSE OFFER?
– Deep, Fine-Grained Learning – This course is jam-packed with information. I made the course that I most wanted to take and as a result, I didn't skimp on the details. You're going to cover more topics and material in greater depth than ever before.
– 100% Real-World Practice – My goal is to get you writing code as much as possible. And not just any code–we'll be working exclusively on practical tasks that are instrumental in building your own amazing real-world apps.
– No-Nonsense, Spot-On Explanations - Every lesson is to-the-point. I break down what we're making, how we'll be doing it and what the final product will look like, all on top of helpful and illustrative descriptions to aid your understanding along the way.
I really enjoyed making this course and I think you’ll enjoy taking it just as much.
Looking forward to seeing you within the course!
Who this course is for:
Python and web developers looking to build impressive real-world, production-ready RESTful API’s using Python and Django Rest Framework!
Python developers looking for a challenge
Developers looking to delve into the world of backend development.