Developing a Real-Time Taxi App with Django Channels and Angular

Learn how to develop and test a real-time ride-sharing app with Django Channels and Angular!

In this course, you will learn how to create a ride-sharing application that incorporates an Angular front-end with a Django back-end in a Docker container. The focus of this course is real-time communication between client and server, and we'll be using Django Channels and Redis to send and receive JSON messages over an open WebSockets connection.

Another important aspect of these chapters is Test-Driven Development (TDD). Each step of the way, we will demonstrate how to test both the UI and the APIs.

Learning Objectives

By the end of this course, you will be able to:

Part 1

Create a RESTful API with Django REST Framework. Implement token-based authentication with JSON Web Tokens (JWT). Use Django Channels to create and update data on the server. Send messages to the UI from the server via WebSockets. Test asyncio coroutines with pytest.

Part 2

Create an Angular app from scratch using the Angular CLI. Make template-driven forms that use two-way data binding. Configure routing to navigate between different views in your app. Write unit tests to confirm your code is working as expected. Implement Bootstrap to polish the look-and-feel of your UI. Run the server and the client as Docker services. Employ authentication so end users can sign up, log in, and log out of the application.

Part 3

Write Angular unit tests using Jasmine. Program Angular code that communicates with the server using RESTful web services. Implement a WebSockets client to send and receive messages in real time. Add Google Maps to an Angular app. Incorporate notification messages into an Angular app.

What will you build?

Django app: We'll configure user authentication and authorization with core Django, coordinate two-way messaging with Django Channels and Redis, and construct a RESTful API with Django REST Framework.

Angular app: We'll build an number of Angular components and control the flow with routing; communicate with the backend using WebSockets, Angular services, and reactive programming; and leverage third-party apps like Google Maps to bolster the user experience.

Info

Current version: 3.0.0

Last updated: September 2nd, 2020

Author: Jason Parent

What will you learn?

Part 1

In Part 1, you'll learn how to program the server code of the ride-sharing application. We'll start by developing a custom user authentication model and data profile. Then we'll create a data model to track the trips that the riders and drivers participate in along with the APIs that provide access to that data. Lastly, we'll leverage the asynchronous nature of Django Channels to send and receive messages via WebSockets. Throughout this part, we'll be testing every function to make sure that the code we write operates the way we expect it to.

Tools and Technologies: (Asynchronous) Python, Django, Django REST Framework, Django Channels, Redis

Part 2

In Part 2, you'll take the first steps in setting up the user interface for the app. We'll start by creating an Angular front-end application. Using TypeScript, we'll write components and services to complement the authentication APIs that allow users to sign up, log in, and log out. Again, we'll make sure to test our application along the way, this time using Jasmine and the Angular testing framework. Before you end this part, you'll learn how to run both the front-end and back-end in a single Docker container.

Tools and Technologies: Angular, TypeScript, Jasmine, Karma, Docker

Part 3

In Part 3, you'll finish coding the front-end and you'll stitch the UI together with the server APIs. Continuing where we left off in Part 2, we'll expand our UI to build two dashboards--one for the rider and one for the driver. Here, we'll also create the TypeScript code necessary for establishing a WebSockets connection with the server and subscribing to it. Along with manual testing, we'll test the real-time nature of the app through automated tests. We'll also incorporate Google Maps so that users can visualize their current locations and the addresses they input.

Tools and Technologies: (Asynchronous) Python, Django, Django Channels, Angular, TypeScript, Jasmine, Karma, WebSockets, Google Maps, Geolocation