Real Python: Get Started With Django Part 3: Django View Authorization

Real Python: Get Started With Django Part 3: Django View Authorization

https://ift.tt/37PRVs7

In part 1 of this series, you learned the fundamentals of Django models and views. In part 2, you learned about user management. In this tutorial, you’ll see how to combine these concepts to do Django view authorization and restrict what users can see and do in your views based on their roles.

Allowing users to log in to your website solves two problems: authentication and authorization. Authentication is the act of verifying a user’s identity, confirming they are who they say they are. Authorization is deciding whether a user is allowed to perform an action. The two concepts go hand in hand: if a page on your website is restricted to logged-in users, then users have to authenticate before they can be authorized to view the page.

Django provides tools for both authentication and authorization. Django view authorization is typically done with decorators. This tutorial will show you how to use these view decorators to enforce authorized viewing of pages in your Django site.

By the end of this tutorial you’ll know how to:

  • Use HttpRequest and HttpRequest.user objects
  • Authenticate and authorize users
  • Differentiate between regular, staff, and admin users
  • Secure a view with the @login_required decorator
  • Restrict a view to different roles with the @user_passes_test decorator
  • Use the Django messages framework to notify your users

If you’d like to follow along with the examples you’ll see in this tutorial, then you can download the sample code at the link below:

Getting Started#

To better understand authorization, you’ll need a project to experiment with. The code in this tutorial is very similar to that shown in part 1 and part 2. You can follow along by downloading the sample code from the link below:

Get the Source Code: Click here to get the source code you’ll use to learn about Django view authorization in this tutorial.

All the demonstration code was tested with Python 3.8 and Django 3.0.7. It should work with other versions, but there may be subtle differences.

Creating a Project#

First, you’ll need to create a new Django project. Since Django isn’t part of the standard library, it’s considered best practice to use a virtual environment. Once you have the virtual environment, you’ll need to take the following steps:

  1. Install Django.
  2. Create a new project.
  3. Create an app inside the project.
  4. Add a templates directory to the project.
  5. Create a site superuser.

To accomplish all that, use the following commands:

$ python -m pip install django==3.0.7
$ django-admin startproject Blog
$ cd Blog
$ python manage.py startapp core
$ mkdir templates
$ python manage.py migrate
$ python manage.py createsuperuser
Username: superuser
Email address: superuser@example.com
Password:
Password (again):

You now have a Blog project, but you still need to tell Django about the app you created and the new directory you added for templates. You can do this by modifying the Blog/settings.py file, first by changing INSTALLED_APPS:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
 "core",
]

The highlighted line indicates the addition of the core app to the list of installed apps. Once you’ve added the app, you need to modify the TEMPLATES declaration:

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 "DIRS": [os.path.join(BASE_DIR, "templates")],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

The highlighted line indicates the change you need to make. It modifies the DIRS list to include your templates folder. This tells Django where to look for your templates.

Note: Django 3.1 has moved from using the os library to pathlib and no longer imports os by default. If you’re using Django 3.1, then you need to either add import os above the TEMPLATES declaration or convert the "DIRS" entry to use pathlib instead.

The sample site you’ll be working with is a basic blogging application. The core app needs a models.py file to contain the models that store the blog content in the database. Edit core/models.py and add the following:

from django.db import models

class Blog(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()

Now for some web pages. Create two views, one for listing all the blogs and one for viewing a blog. The code for your views goes in core/views.py:

from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from core.models import Blog

def listing(request):
    data = {
        "blogs": Blog.objects.all(),
    }

    return render(request, "listing.html", data)

def view_blog(request, blog_id):
    blog = get_object_or_404(Blog, id=blog_id)
    data = {
        "blog": blog,
    }

    return render(request, "view_blog.html", data)

Read the full article at https://realpython.com/django-view-authorization/ »


[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]

Python

via Planet Python https://ift.tt/1dar6IN

October 28, 2020 at 03:50PM

A Bad-Ass Off-Road 4×4 School Bus

A Bad-Ass Off-Road 4×4 School Bus

https://ift.tt/2Gcx5Ik

As we learned last year, kids in Oulu, Finland ride their bicycles to school through snow, in negative-22 degrees Fahrenheit weather.

Around the world there are schoolchildren who live in remote areas and may not have the bicycles to get them there. Turns out there’s a vehicle for this application: The Praetorian off-road school bus, made by Czech-Republic-based Torsus.

The 4×4 Praetorian can carry 36 passengers, handle gnarly angles, clear obstacles 13.4 inches in height and wade through nearly three feet of water. With an off-road suspension and a diesel engine producing 290 horsepower and an absurd 848 lb-ft of torque, this thing will get the kids to school no matter how bad the roads are.

You might be wondering: What makes the Praetorian a school bus? The truth is, just the paint job, and the lack of the water cannon mounted to Torsus’ Anti-Riot Praetorian.

The off-road bus was actually designed for multiple applications, of which the school bus is just one. Check out the Praetorian’s range of liveries:

You can read more details about each version here.

fun

via Core77 https://ift.tt/1KCdCI5

October 28, 2020 at 11:29AM

I’m sorry, but I just can’t resist this!

I’m sorry, but I just can’t resist this!

https://ift.tt/31OnnU7

 

I may be in my sixties, but I still remember with joy the cartoons of my youth.  One of my favorites was Tom & Jerry, with the scheming cat regularly being handed his come-uppance at the hands of Jerry Mouse and his allies.  The series is criticized today for being too violent – but I don’t recall any blood ever being shown, despite Tom being sliced in half, Jerry folded, spindled and mutilated, and all parties being assaulted several times during the course of each cartoon.

I therefore giggled like a schoolboy yesterday when I came across this compilation of some of the best gags from early Tom & Jerry cartoons.  It’s 23 minutes of mayhem and laughter.  Enjoy!  (If the embedded cartoon won’t play, you’ll find it here on YouTube.)

Oh, the memories . . .

Peter

non critical

via Bayou Renaissance Man https://ift.tt/1ctARFa

October 28, 2020 at 06:56AM

Honest The Mandalorian Trailer

Honest The Mandalorian Trailer

https://ift.tt/3e1bn6m

Honest The Mandalorian Trailer

Link

The Mandalorian is returning to Disney+ on 10.30.2020, so it only makes sense that Screen Junkies would seize upon the chance to make an Honest Trailer for the hit series. Despite being such an excellent show, they still found plenty of reasons to poke fun at its characters and storylines.

fun

via The Awesomer https://theawesomer.com

October 27, 2020 at 07:15PM

Winners of the 2020 Epson International Pano Awards (23 photos)

Winners of the 2020 Epson International Pano Awards (23 photos)

https://ift.tt/3oyKDPp

The top-scoring panoramic photos entered in the eleventh Epson International Pano Awards have just been announced. The contest is meant to showcase the best work of panoramic photographers around the world. Organizers reported that they received 5,859 entries from 1,452 photographers in 96 countries this year, competing for the top spots in five categories, for several special awards, and for some of the cash prizes offered. Contest organizers were once again kind enough to share some of the winners and top scorers here.



Spring Hibernation, Overall Winner, and Winner, Open – Nature / Landscapes. Photographed near Squamish, BC, Canada.
(© Copyright Matt Jackisch / The 11th EPSON International Pano Awards)

via In Focus https://ift.tt/2hyaA18

October 27, 2020 at 02:05PM

Livewire File Uploads to Amazon S3

Livewire File Uploads to Amazon S3

https://ift.tt/2JfRldj


Many multi-tenant apps require image uploads, and may need to store those files in Amazon S3. Let’s create an Amazon S3 bucket from scratch and get it connected to our app. Then, we’ll leverage the powerful and simple file uploading functionality that Livewire provides.

programming

via Laracasts https://ift.tt/1eZ1zac

October 27, 2020 at 02:41PM

Wyze launches version 3 of its $20 security camera

Wyze launches version 3 of its $20 security camera

https://ift.tt/37Npg7k

Wyze first made a name for itself when it launched its $20 indoor security camera a few years ago. Since then, the company branched out into other smart home products, ranging from doorbells to scales. Today, it’s going back to its origins with the launch of the Wyze Cam V3, the third generation of its flagship camera.

The new version is still $20 (though that’s without shipping unless there’s a free shipping promotion in the Wyze store), but the company redesigned both the outside and a lot of the hardware inside the camera, which is now also IP65 rated, so you can now use it outdoors, too.

Image Credits: Wyze

The Cam V3 now also features new sensors that enable color night vision, thanks to an F1.6 aperture lens that captures 40 percent more light than the previous version. That lens now also covers a 130-degree field of view (up from 110 degrees in V2) and the company pushed up the frames per second from 15 during the day and 10 at night to 20 and 15 respectively.

The company also enhanced the classic black and white night vision mode — which you’ll still need when it’s really dark outside or in the room you are monitoring — by adding a second set of infrared lights to the camera.

Other new features are an 80dB siren to deter unwanted visitors. This feature is triggered by Wyze’s AI-powered person-detection capability, but that’s a feature the company recently moved behind its $2/month CamPlus paywall, after originally offering it for free. That’s not going to break the bank (and you get a generous free trial period), but it’d be nice if the company could’ve kept this relatively standard feature free and instead only charged for extra cloud storage or more advanced features (though you do get free 14-day rolling cloud storage for 12-second clips).

Wyze Cam V2 (left) and V3 (right).

Wyze provided me with a review unit ahead of today’s launch (and a Cam V2 to compare them). The image quality of the new camera is clearly better and the larger field of view makes a difference, even though the distortion at the edges is a bit more noticeable now (but given the use case, that’s not an issue). The new night color vision mode works as promised and I like that you can set the camera to automatically switch between them based on the lighting conditions.

The person detection has been close to 100% accurate — and unlike some competing cameras that don’t feature this capability, I didn’t get any false alarms during rain or when the wind started blowing leaves across the ground.

If you already have a Wyze Cam V2, you don’t need to upgrade to this new one — the core features haven’t changed all that much, after all. But if you’re in the market for this kind of camera and aren’t locked into a particular security system, it’s hard to beat the new Wyze Cam.

technology

via TechCrunch https://techcrunch.com

October 27, 2020 at 01:08PM

MagSafe 15W fast charging restricted to Apple 20W adapter

MagSafe 15W fast charging restricted to Apple 20W adapter

https://ift.tt/2Tup1FS


New testing shows Apple’s MagSafe charging puck does peak at 15W with iPhone 12, but only when paired with the company’s 20W adapter.

The apparent restriction was discovered by Aaron Zollo of YouTube channel Zollotech. In a comprehensive evaluation of Apple’s MagSafe device posted on Monday, Zollo found two Apple adapters — a new standalone 20W USB-C device and the 18W unit that came with iPhone 11 Pro handsets — achieved high charge rates.

Measuring energy throughput with an inline digital meter revealed MagSafe hits the advertised 15W peak charging rate (up to 16W in the video) when paired with Apple’s branded 20W adapter. Speeds drop to about 13W with the 18W adapter, and Zollo notes the system takes some time to ramp up to that level.

Older adapters and third-party models with high output ratings do not fare well in the test. Apple’s own 96W MacBook Pro USB-C adapter eked out 10W with MagSafe, matching a high seen by Anker’s PowerPort Atom PD1. Likewise, charging rates hovered between 6W and 9W when attached to Aukey’s 65W adapter, Google’s Pixel adapter and Samsung’s Note 20 Ultra adapter.

It appears third-party devices will need to adopt a MagSafe-compatible power delivery (PD) profile to ensure fast, stable energy delivery when connected to iPhone 12 series devices.

As can be expected with any charging solution, temperature plays a significant role in potential throughput. Zollo found MagSafe throttles speeds as temperatures rise, meaning actual rates are not a constant 15W even when using the 20W adapter. When heat rises, energy output decreases to protect sensitive hardware components and the battery itself. In some cases, this could prompt users to remove their iPhone from its case — including Apple-branded MagSafe models — to achieve maximum thermal efficiency.

Zollo also confirms older Qi-compatible iPhone models, like iPhone 8 Plus and iPhone 11 Pro Max, charge at about 5W with MagSafe. Apple previously said Qi devices would charge at 7.5W.

macintosh

via AppleInsider https://ift.tt/3dGGYcl

October 26, 2020 at 08:38PM

Device Tracking in Laravel

Device Tracking in Laravel

https://ift.tt/3otT1jj


Laravel Device Tracking is a package by Ivano Matteo that allows you to track different devices used by users of your application. You can use this package as a base for functionality like detecting users on new devices and managing the verified status between device and user. You could also possibly see device hijacking.

The package works by adding the UseDevices trait to your application’s User model:

use IvanoMatteo\LaravelDeviceTracking\Traits\UseDevices;

class User extends Authenticatable
{

    use HasFactory, Notifiable, UseDevices;
    // ...
}

The UseDevices trait gives you access to a devices() (belongs to many) relationship to get verified devices:

$user->device()

Here are some examples of methods you can access via the package’s facade:

use IvanoMatteo\LaravelDeviceTracking\LaravelDeviceTrackingFacade as DeviceTracker;

DeviceTracker::detectFindAndUpdate();

DeviceTracker::flagCurrentAsVerified();

// Flag as verified for the current user
DeviceTracker::flagCurrentAsVerified();

// Flag as verified for a specific user
DeviceTracker::flagAsVerified($device, $user_id);

// Flag as verified for a specific user by device UUID
DeviceTracker::flagAsVerifiedByUuid($device_uuid, $user_id);

You can learn more about this package, get full installation instructions, and view the source code on GitHub at ivanomatteo/laravel-device-tracking.


This package was submitted to our Laravel News Links section. Links is a place the community can post packages and tutorials around the Laravel ecosystem. Follow along on Twitter @LaravelLinks

Filed in:
News
/
laravel
/
packages

programming

via Laravel News https://ift.tt/14pzU0d

October 27, 2020 at 09:22AM