Book Image

Building Django 2.0 Web Applications

By : Tom Aratyn
Book Image

Building Django 2.0 Web Applications

By: Tom Aratyn

Overview of this book

<p>This project-based guide will give you a sound understanding of Django 2.0 through three full-featured applications. It starts off by building a basic IMDB clone and adding users who can register, vote on their favorite movies, and upload associated pictures. You will learn how to use the votes that your users have cast to build a list of the top 10 movies. This book will also take you through deploying your app into a production environment using Docker containers hosted on the server in Amazon's Electric Computing Cloud (EC2). </p><p> </p><p>Next, you're going to build a Stack Overflow clone wherein registered users can ask and answer questions. You will learn how to enable a user asking a question to accept answers and mark them as useful. You will also learn how to add search functionality to help users find questions by using ElasticSearch. You'll discover ways to apply the principles of 12 factor apps while deploying Django on the most popular web server, Apache, with mod_wsgi. Lastly, you'll build a clone of MailChimp so users can send and create emails, and deploy it using AWS. </p><p> </p><p>Get set to take your basic Python skills to the next level with this comprehensive guide! </p><p></p>
Table of Contents (19 chapters)
Title Page
www.packtpub.com
Contributors
Preface
Index

API permissions


In this section, we'll create a permission class that the Django REST framework will use to check whether a user may perform an operation on a MailingList or Subscriber. This will perform a very similar role to the UserCanUseMailingList mixin we created in Chapter 10, Starting Mail Ape.

Let's create ourCanUseMailingList class in django/mailinglist/permissions.py:

from rest_framework.permissions import BasePermission

from mailinglist.models import Subscriber, MailingList


class CanUseMailingList(BasePermission):

    message = 'User does not have access to this resource.'

    def has_object_permission(self, request, view, obj):
        user = request.user
        if isinstance(obj, Subscriber):
            return obj.mailing_list.user_can_use_mailing_list(user)
        elif isinstance(obj, MailingList):
            return obj.user_can_use_mailing_list(user)
        return False

Let's take a closer look at some of the new elements introduced in our CanUseMailingList class:

  • BasePermission...