Skip to content

Instantly share code, notes, and snippets.

View toxinu's full-sized avatar

Geoffrey toxinu

View GitHub Profile
@toxinu
toxinu / bash.sh
Created September 23, 2020 16:32
blog/pip-installable-django-project
$ tree .
.
├── conftest.py
├── Makefile
├── MANIFEST.in
├── README.rst
├── setup.cfg
├── setup.py
├── src
│   └── my_awesome_project
@toxinu
toxinu / local.dist.py
Created September 23, 2020 16:32
blog/pip-installable-django-project
LOGIN_URL = 'https://localhost:8000/login'
# Set these to drop to an unprivileged user after
# binding the SMTP daemon (Default: False)
DROP_PRIVILEGES_USER = False
# Product name appear in email templates and optouts pages
PRODUCT_NAME = 'My Awesome App'
@toxinu
toxinu / setup.py
Created September 23, 2020 16:35
blog/pip-installable-django-project
[...]
entry_points={
'console_scripts': [
'my-awesome-project = my_awesome_project.runner:main']
},
extras_require={
'dev': [
'bumpversion==0.5.3',
'docker-compose==1.9.0'
],
@toxinu
toxinu / version.py
Created September 23, 2020 16:37
blog/pip-installable-django-project
# src/my_awesome_project/runner/commands/version.py
import click
import django
@click.command()
def version():
"Show Django version."
click.echo('Django {}'.format(django.__version__))
@toxinu
toxinu / models.py
Created September 24, 2020 01:23
blog/filtering-and-ordering-with-restless
from django.db import models
class Pizza(models.Model):
name = models.CharField(max_length=100)
price = models.FloatField()
is_vegetarian = models.BooleanField(default=False)
class Ingredient(models.Model):
@toxinu
toxinu / resources.py
Created September 24, 2020 01:24
blog/filtering-and-ordering-with-restless
from restless.dj import DjangoResource
from restless.preparers import FieldsPreparer
from .models import Pizza
class PizzaResource(DjangoResource):
preparer = FieldsPreparer(fields={
'id': 'id', 'name': 'name'})
@toxinu
toxinu / class.py
Created September 24, 2020 01:25
blog/filtering-and-ordering-with-restless
class APIFilterMixin:
allowed_fields_filter = []
def filter(self, queryset):
filters = {}
for arg in self.request.GET:
if arg in self.allowed_fields_filter:
filters.update({arg: self.request.GET.get(arg)})
return queryset.filter(**filters)
@toxinu
toxinu / resources.py
Created September 24, 2020 01:25
blog/filtering-and-ordering-with-restless
class PizzaResource(APIFilterMixin, DjangoResource):
preparer = FieldsPreparer(fields={
'id': 'id', 'name': 'name'})
allowed_fields_filter = [
'name', 'name__startswith',
'price', 'price__lte', 'price__gte',
'ingredients__ingredient__name']
def list(self):
qs = Pizza.objects.all()
@toxinu
toxinu / class.py
Created September 24, 2020 01:26
blog/filtering-and-ordering-with-restless
class APIOrderingMixin:
allowed_fields_ordering = []
ordering_field = 'order_by'
def ordering(self, queryset):
order_by = self.request.GET.get(self.ordering_field)
if not order_by:
return queryset
if order_by.split('-')[-1] in self.allowed_fields_ordering:
@toxinu
toxinu / models.py
Created September 24, 2020 01:27
blog/restless-for-building-python-restful-api
class Country(models.Model):
name = models.CharField(max_length=2)
class Pizza(models.Model):
name = models.CharField(max_length=255)
country = models.ForeignKey(Country)