Django REST Vrajitorie

Integrarea Django REST Framework cu SQLAlchemy

django-rest-witchcraft este o extensie pentru Django REST Framework care adauga suport pentru SQLAlchemy. Acesta isi propune sa ofere o experienta de dezvoltare similara cu construirea API-urilor REST cu Django REST Framework cu Django ORM, cu exceptia SQLAlchemy.

Instalare

pip instaleaza django-rest-vrajitorie

Pornire rapida

In primul rand, sa definim cateva modele simple:

import sqlalchemy ca sa import sqlalchemy.orm # noqa din sqlalchemy.ext.declarative import declarative_base engine = sa.create_engine (‘sqlite: ///: memory:’, echo = True) session = sa.orm.scoped_session (sa.orm .sessionmaker (bind = motor)) Base = declarative_base () Base.query = session.query_property () class Group (Base): __tablename__ = ‘groups’ id = sa.Column (sa.Integer (), primary_key = True, autoincrement = Adevarat) nume = sa.Column (sa.String ()) clasa Utilizator (baza): __tablename__ = ‘utilizatori’ id = sa.Column (sa.Integer (), key_primar = True, autoincrement = True) nume = sa. Column (sa.String ()) fullname = sa.Column (sa.String ()) parola = sa.Column (sa.String ()) _group_id = sa.Column (‘group_id’, sa.Integer (), sa. ForeignKey (‘groups.id’)) group = sa.orm.relationship (Group, backref = ‘users’) clasa Adresa (baza):__tablename__ = ‘adrese’ id = sa.

xxx gratis en español follando rico
mamadas por dinero pornoxxxxx
follando a mi hija porno español jovencitas
se folla a su cuñada comic porno español
hombres pajeandose videos porno abuelas
folladoras cincuentonas follando
porno español años 70 xxx abuelas
todoporno pono gay
suegras peludas danna paola desnuda
copilacion de mamadas culos porno
porno gay españoles corridas en la garganta
madres haciendo pajas a sus hijos chochitos jovencitos
penes enormes orgias caseras
randy dave intercambio parejas amateur
comiendo tetas el video porno mas visto en internet
masajes eroticos chinos follando en el campo
maduras gordas desnudas pajas caseras
porno casero colombiano cachondas españolas
porno muy duro me hace una paja
super maduras videos porno caseros españoles

Column (sa.Integer (), primary_key = True, autoincrement = True) email_address = sa.Column (sa.String (), nullable = False) _user_id = sa.Column (sa.Integer (), sa.ForeignKey (‘users.id’)) user = sa.orm.relation (User, backref = ‘adresele’) Base.metadata.create_all (motor)

Nimic extraordinar aici, avem o clasa de utilizator care poate apartine unei instante de grup si are multe instante de adresa

Acest serializator poate gestiona operatiuni de creare, actualizare sau actualizare partiala imbricate.

Sa definim un serializator pentru utilizator cu toate campurile:

clasa UserSerializer (serializatori.ModelSerializer): clasa Meta: model = sesiune utilizator = campuri sesiune = ‘__all__’

Aceasta va crea urmatorul serializator pentru noi:

>>> serializator = UserSerializer () >>> serializator UserSerializer (): id = IntegerField (allow_null = False, help_text = None, label = ‘Id’, required = True) name = CharField (allow_null = True, help_text = None, label = ‘Name’, max_length = None, required = False) fullname = CharField (allow_null = True, help_text = None, label = ‘Fullname’, max_length = None, obligatoriu = False) password = CharField (allow_null = True, help_text = None, label = ‘Password’, max_length = None, required = False) group = GroupSerializer (allow_null = True, is_nested = True, required = False): id = IntegerField (allow_null = False, help_text = None, label = ‘Id’ , obligatoriu = False) nume = CharField (allow_null = Adevarat, help_text = Niciunul, eticheta = ‘Nume’, lungime maxima = Niciunul, obligatoriu = False) adresele = AdresaSerializator (allow_null = Adevarat, multe = Adevarat, obligatoriu = False):id = IntegerField (allow_null = False, help_text = None, label = ‘Id’, required = False) email_address = CharField (allow_null = False, help_text = None, label = ‘Email_address’, max_length = None, required = True) url = UriField (read_only = True)

Sa incercam sa cream o instanta de utilizator cu noul nostru serializator:

serializator = UserSerializer (date = {‘nume’: ‘shosca’, ‘parola’: ‘peste-spada’,}) serializer.is_valid () serializer.save () user = serializer.instance

Aceasta va crea urmatorul utilizator pentru noi:

>>> Utilizator utilizator (_group_id = Niciuna, id = 1, nume = ‘shosca’, nume complet = Niciuna, parola = ‘peste spada’)

Sa incercam sa actualizam instanta de utilizator a utilizatorului si sa-i schimbam parola:

serializator = UserSerializer (utilizator, date = {‘nume’: ‘shosca’, ‘parola’: ‘parola’,}) serializer.is_valid () serializer.save () user = serializer.instance

Utilizatorul nostru arata acum ca:

>>> Utilizator utilizator (_group_id = Niciuna, id = 1, nume = ‘shosca’, nume complet = Niciuna, parola = ‘parola’)

Sa incercam sa ne actualizam din nou instanta de utilizator, dar de data aceasta ne putem schimba doar parola:

serializator = UserSerializer (utilizator, date = {‘parola’: ‘peste-spada’,}, partial = Adevarat) serializer.is_valid () serializer.save () user = serializer.instance

Aceasta va actualiza urmatorul utilizator pentru noi:

>>> Utilizator utilizator (_group_id = Niciuna, id = 1, nume = ‘shosca’, nume complet = Niciuna, parola = ‘peste spada’)

Utilizatorul nostru nu apartine unui grup, permite sa remediem:

group = Group (name = ‘Admin’) session.add (group) session.flush () serializer = UserSerializer (user, data = {‘group’: {‘id’: group.id}}) serializer.is_valid () serializer.save () user = serializer.instance

Acum, utilizatorul nostru arata ca:

>>> User User (_group_id = 1, id = 1, name = ‘shosca’, fullname = None, parola = ‘swordfish’) >>> user.group Group (id = 1, name = ‘Admin’)

De asemenea, putem schimba numele grupului de utilizatori prin intermediul utilizatorului folosind actualizari imbricate:

class UserSerializer (serializers.ModelSerializer): class Meta: model = User session = session fields = ‘__all__’ extra_kwargs = {‘group’: {‘allow_nested_updates’: True}} serializer = UserSerializer (user, data = {‘group’: {‘name’: ‘Super User’}}, partial = Adevarat) serializer.is_valid () user = serializer.save ()

Acum, utilizatorul nostru arata ca:

>>> User user (_group_id = 1, id = 1, name = ‘shosca’, fullname = None, parola = ‘swordfish’) >>> user.group Group (id = 1, name = ‘Super User’)

Putem utiliza acest serializator intr-un set de vizualizari precum:

din rest_witchcraft importate viewsets class UserViewSet (viewsets.ModelViewSet): queryset = User.query serializer_class = UserSerializer

Si putem inregistra acest set de vizualizari in urls.py cum ar fi:

din rest_witchcraft import routers router = routers.DefaultRouter () router.register (r’users ‘, UserViewSet) urlpatterns = [… url (r’ ^ ‘, include (router.urls)), …]