Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GrailInventory – Advanced Backend Development

Eugene Oskin
September 14, 2018

GrailInventory – Advanced Backend Development

Eugene Oskin

September 14, 2018
Tweet

More Decks by Eugene Oskin

Other Decks in Programming

Transcript

  1. DRF

  2. @api_view(['GET', 'POST']) def warehouse_list(request): if request.method == 'GET': warehouse =

    Warehouse.objects.all() serializer = WarehouseSerializer(warehouse) return Response(serrtializer.data) class WarehouseList(APIView): def get(self, request, format=None): warehouse = Warehouse.objects.all() serializer = WarehouseSerializer(warehouse, many=True) return Response(serializer.data) View
  3. Generic View from warehouse.models import Warehouse from warehouse.serializers import WarehouseSerializer

    from rest_framework import generics class WarehouseList(generics.ListCreateAPIView): queryset = Warehouse.objects.all() serializer_class = WarehouseSerializer class WarehouseDetail(generics.RetrieveUpdateDestroyAPIView): queryset = Warehouse.objects.all() serializer_class = WarehouseSerializer
  4. Mixins class WarehousesDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): queryset = Warehouse.objects.all() serializer_class

    = WarehouseSerializer def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
  5. ViewSet from rest_framework import viewsets from xero_sync.apps.tax_rates.models import XeroTaxRate from

    core.mixins import APIUserOwnerPermissionMixin from .serializers import XeroTaxRateSerializer class XeroTaxRateViewSet(APIUserOwnerPermissionMixin, viewsets.ModelViewSet): queryset = XeroTaxRate.objects.all() serializer_class = XeroTaxRateSerializer
  6. Xero api and pyxero def xero_update_invoices(invoices, xero_client, delete=False): resp =

    xero_client.invoices.save(map(partial(prepare_invoice, delete=delete), invoices)) for invoice, data in zip(invoices, resp): invoice.xero.data = data invoice.xero.save() def sync_invoice(invoice, xero_client): if invoice.xero and invoice.xero.xero_id: response = xero_client.invoices.get(invoice.xero.xero_id) invoice.xero.data = response[0] invoice.xero.save()
  7. import { react2angular } from 'react2angular' import angular from 'angular'

    import PurchaseDetailsRoot from '../react-grail/.../details' const app = angular.module('grail', app_requirements) app.component( 'purchaseDetails', react2angular(PurchaseDetailsRoot, [ 'Contacts', 'warehouses', 'currency', 'onLoadData', .... ]) ) Frontend
  8. • Use right abstractions • Use feature-rich Design System •

    Integration is the hardest part • Communication is essential Lessons