Bazuca ou Canivete?

Django ou Flask?

About me

  • Tyrone Damasceno
  • Potiguar (de Natal/RN)
  • Desenvolvedor Python
  • Ex competidor de maratona de programação
  • Apaixonado por comunidade
  • Burger&Beer

NÃO SÃO OS ÚNICOS!!!

Django

& django rest framework

  • Super produtividade (quando se aprende)
  • Entrega tudo na sua mão
  • Padrão MTV (parece com o MVC)
  • "Ideal" para projetos grandes
  • Django ORM, Django admin, Django templates, Django forms, Django auth... Django life
  • Django Rest Framework que é outra lib/framework "em cima" do django, agiliza muito o desenvolvimento de APIs REST

Flask

  • Microframework
  • Curva de aprendizado baixissima
  • Simplicidade, extensibilidade
  • Entrega o básico (mas tem um ecossistema completo a um pip install de distância)
  • Você que decide o padrão, mas geralmente usa-se o MVC
  • "Ideal" para projetos menores
  • Ótima integração com NoSQL
  • Mais praticidade para customização (veremos hoje)

Primeiras diferenças

Conversou besteira demais já

  • Uma API Rest em Django e em Flask
  • O tema é uma agenda de contatos
  • Será possível cadastrar um contato, com telefone, email, telegram, github e twitter
  • Então, vamo simbora!

O que faremos?

Como definir rotas?

from flask_restful import Api
api = Api(app)

from flaskapi.flaskapi import resources

api.add_resource(resources.Home, '/')
api.add_resource(resources.Login, '/login')
api.add_resource(resources.User, '/user')
api.add_resource(resources.Deposit, '/deposit')
api.add_resource(resources.Withdraw, '/withdraw')
api.add_resource(resources.Transfer, '/transfer')
api.add_resource(resources.Statements, '/statements')
from django.urls import path, include
from rest_framework import routers

router = routers.DefaultRouter()
router.register('user_register', views.UserViewSet, base_name='user_register')
router.register('user', views.ProtectedUserViewSet, base_name='user')
router.register('login', views.LoginViewSet, base_name='login')
router.register('operations', views.OperationsViewSet, base_name='operations')

urlpatterns = [
    path('', include(router.urls))
]

E os modelos?

class User(db.Model, BaseModel):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    doc_number = db.Column(db.String(100), nullable=False)
    balance = db.Column(db.Float, default=0.0)
    is_active = db.Column(db.Boolean, default=True)
    transactions = db.relationship('Transaction', backref='owner')


class Transaction(db.Model, BaseModel):
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    value = db.Column(db.Float, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class User(PermissionsMixin, AbstractBaseUser):
    email = models.EmailField(unique=True)
    doc_number = models.CharField(max_length=100)
    balance = models.FloatField(default=0.0)

    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)


class Transaction(models.Model):
    timestamp = models.DateTimeField(default=datetime.now)
    value = models.FloatField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

What about SECURITY?

@jwt_required
def get(self):
    user = _get_current_user()
    if not user:
      return {'message': 'User not found'}, 404
    return {'message': 'Success', 'data': user.to_dict()}, 200
class UserViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = (TokenAuthentication, )
    permission_classes = (IsAuthenticated, )
from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///my.db'
db = SQLAlchemy(app)

Como conectar com um banco?

Flask

Django

O django possui uma ORM própria bastante poderosa e bem completa.

O flask tem extensões que trabalham junto da ORM SQLalchemy que é fantástica.

E como manipular os dados?

Questions?

Temos um veredito?

Made with Slides.com