Introduction

Part 1, Chapter 1


Uber App Using Django Channels

Many apps rely on real-time, bi-directional communication to give users a great experience. One example is a ride-sharing app like Uber or Lyft, which is built on the messages that are sent between a rider and a driver. A rider selects a starting location and destination, then broadcasts a trip request to all nearby drivers. An available driver accepts the trip and meets the rider at the pick-up address. In the meantime, every move the driver makes is sent to the rider almost instantaneously and the rider can track the trip status as long as it is active.

In this course, we will demonstrate how to program a ride-sharing app using the bi-directional communication that WebSockets and Django Channels provide. We'll then tie it all together by creating a nice UI with Angular.

The instruction will be given in three parts:

  1. Part 1: Using test-driven development, we'll write and test the server-side code powered by Django and Django Channels.
  2. Part 2: We'll set up the client-side Angular app along with authentication and authorization. Also, we'll streamline the development workflow by adding Docker.
  3. Part 3: Finally, we'll walk through the process of creating the app UI with Angular.

In the end, you will have an app with two user experiences—one from the perspective of the driver and the other from the rider. You will be able to access both experiences simultaneously in order to see how a trip is planned and executed in real-time.

At any time, consult the taxi-app repository to compare your code to the source of truth. Commits are tagged using the pattern v{part}.{chapter}.

Our server-side application uses:

  • Python (v3.7.0)
  • Django (v2.1)
  • Django Channels (v2.1.2)
  • Django REST Framework (v3.8.2)
  • Redis (v4.0.11)

Client-side:

  • Angular (v6.1.4)

We'll also use Docker v18.06.0-ce.

Objectives

By the end of Part 1, you will be able to...

  1. Create simple GET requests with Django REST Framework
  2. Implement token-based authentication
  3. Use Django Channels to create and update data on the server
  4. Send messages to the UI from the server via WebSockets
  5. Test asyncio coroutines with pytest



Mark as Completed