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 on the 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'll demonstrate how to test both the UI and the APIs.
Select a Part
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.
- 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
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.
- 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
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.
- 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
This is not a beginner course. It's designed for the advanced-beginner -- someone with at least six months of web development experience. Before beginning, you should have some familiarity with the following topics. Refer to these resources for more info:
- Test-Driven Development with Python, Django, and Docker
- Looking for a solid introduction to Django? Check out Django for Beginners. Highly recommended!
The TestDriven.io courses are some of the best courses I've ever done for any language, any platform, any price range... just some of the most thorough and well-sourced courses around.
Just a word of thanks for doing such a great job with these training courses. The thorough, entire-lifecycle approach -- from implementation through test, coverage, quality, CI/CD, and all the rest -- is what separates these courses from other training material that I've completed. I'll be able to walk away from here with knowledge and skills that I can apply immediately at work -- and for that I'm grateful. It's a rare gift in an environment where so much 'training' is really just lightweight treatment that doesn't begin to scratch the surface of real, end-to-end software development. Really well done!
The TestDriven.io courses are worth 10 times what I paid for them.
I'm writing to thank you for all the tutorials and the work you've put out there. I'm new to DevOps and I found TestDriven.io while looking for Django and DevOps related topics. One of the best collections of tutorials and guides I've seen -- very well-written, clear, and concise. You have saved me so much time and energy. Thanks from the bottom of my heart.
I am very much into buying and purchasing any course by you and your team. I've never felt like a better programmer ready to show my coding chops to the world.
Frequently Asked Questions
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.
What support does TestDriven.io offer?
Since the courses mimic real-world development, support is provided via Stack Overflow. Helpful users, including the developers of the courses, read and respond to messages on Stack Overflow. If you get stuck and you can't find an answer via Stack Overflow, feel free to reach out via email directly. Just be sure to detail what you've tried. For more, review Support and Consulting.
How long does it take to complete the course?
It's dependent on your current skill level. On average, it takes approximately 12 hours to complete.