python
25 lines · 2 tabs
Priya Sharma
Jan 2026
2 tabs
from django.core.exceptions import PermissionDenied
class UserOwnershipMixin:
"""Ensure the object belongs to the current user."""
def get_object(self, queryset=None):
obj = super().get_object(queryset)
if obj.owner != self.request.user:
raise PermissionDenied("You don't own this object")
return obj
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import UpdateView
from .mixins import UserOwnershipMixin
from .models import Post
class PostUpdateView(LoginRequiredMixin, UserOwnershipMixin, UpdateView):
model = Post
fields = ['title', 'content', 'published']
template_name = 'blog/post_form.html'
def get_queryset(self):
# Only show posts owned by current user
return super().get_queryset().filter(owner=self.request.user)
2 files · python
Explain with highlit
Mixins let me compose view behavior without duplication. LoginRequiredMixin is essential for protecting views. I create custom mixins like UserOwnershipMixin to encapsulate common patterns. Mixin order matters due to Python's MRO—I put Django's mixins first, then custom mixins, then the base view class. By overriding get_queryset or get_object, I can add filtering or prefetching logic. This keeps views DRY and makes it easy to apply consistent rules across multiple views. Testing mixins in isolation also improves coverage.
Related snips
python
import os
import stat
for root, _dirs, files in os.walk('/etc'):
for name in files:
path = os.path.join(root, name)
Python security audit script for exposed risky filesystem state
python
auditing
host-security
by Kai Nakamura
1 tab
python
class Product(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
cost = models.DecimalField(max_digits=10, decimal_places=2)
margin = models.DecimalField(max_digits=5, decimal_places=2, blank=True)
Django model signals vs overriding save
django
python
models
by Priya Sharma
2 tabs
python
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
Django URL namespacing and reverse lookups
django
python
urls
by Priya Sharma
3 tabs
python
import graphene
from graphene_django import DjangoObjectType
from blog.models import Post, Comment
class PostType(DjangoObjectType):
Django GraphQL with Graphene
django
python
graphql
by Priya Sharma
2 tabs
ruby
class Comment < ApplicationRecord
belongs_to :post, touch: true
belongs_to :author, class_name: "User"
validates :body, presence: true, length: { maximum: 10_000 }
Granular Cache Invalidation with touch: true
rails
caching
activerecord
by codesnips
4 tabs
python
from django.db.models import Count, Avg, Sum, Q, F
from django.views.generic import TemplateView
from products.models import Product, Order, OrderItem
class DashboardView(TemplateView):
Django aggregation with annotate for statistics
django
python
database
by Priya Sharma
1 tab
Share this code
Here's the card — post it anywhere.