рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдореЗрд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (iOS, Android) рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреА
рдмрд╛рдЗрдХ рдХрд╛ рдмреИрдХрдПрдВрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ, рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рддреА рд╣реИ - рдЖрдкрдХреЛ рдПрдХ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд BaaS рд╕реЗрд╡рд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреА, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЙрдкрдХрд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯреА рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдкрд╛рдпрдерди (Django) рдореЗрдВ HTTP, REST, JSON рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрддрд░ рдХрд╛ рдЬреНрдЮрд╛рдиред
рдФрд░ рджреВрд╕рд░реЗ рджрд┐рди, рдПрдХ рдЫреЛрдЯреА рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛, рдЬрд┐рд╕ рдкрд░ рдХреНрд╖реЗрддреНрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рд╛рд░ рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рд╣реИред рд╡рдХреНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреА рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдПрдХ рдЫреЛрдЯреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: рдкрд╛рдпрдерди (рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ), Django (рдмреЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ), рдФрд░ Tastypie рдлреНрд░реЗрдорд╡рд░реНрдХ (рд╡реЗрдм тАЛтАЛрд╕реЗрд╡рд╛рдУрдВ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд)ред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ Django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ:
python django-admin.py startproject EventApp
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВред Tastypie рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
pip install django-tastypie
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
Python2.6 + рдФрд░
Django 1.5+ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреА рдЕрдирджреЗрдЦреА рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдврд╛рдВрдЪреЗ рдиреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЙрд╕реА рддрд░рд╣ рдЕрдЬрдЧрд░-рдорд╛рдЗрдордкреЗрд░реЗрд╕ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ, рд▓рд┐рдЦреЗрдВ:
INSTALLED_APPS += ['tastypie']
рдпрд╛ рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдореЗрдВ 'tastypie' рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореЙрдбрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рд╣рдордиреЗ рдПрдХ рд╕реНрдкреАрдХрд░ рдореЙрдбрд▓ рдФрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рд▓рд┐рдЦрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рд╕реНрдкреАрдХрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм, рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдПрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдо REST рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред
рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдкреАрдЖрдИ рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрд╛ рдЖрдк рдЗрд╕реЗ рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
from tastypie.resources import ModelResource from EventApp.models import Speaker, Event class SpeakerResource(ModelResource): class Meta: queryset = Speaker.objects.all() resource_name = 'speaker' class EventResource(ModelResource): speaker = fields.ForeignKey(SpeakerResources, 'speaker', blank=True, null=True) class Meta: queryset = Event.objects.all() resource_name = 'event'
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдордиреЗ рддрдерд╛рдХрдерд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдИрдВ, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реА REST рд╕реЗрд╡рд╛ рдореЗрдВ рдореБрдЦреНрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рдпреЗ рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмрджрд▓реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЙрд╕ рдореЙрдбрд▓ рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреНрд╡реЗрд░реА рдлрд╝реАрд▓реНрдб рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рджреЗрддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрди_рдирд╛рдо рдлрд╝реАрд▓реНрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
рдПрдХ рдЕрдиреНрдп рдмрд┐рдВрджреБ, EventResources рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдкреАрдХрд░ рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд╕рдВрд╕рд╛рдзрди рд╕реНрдкреАрдХрд░ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП
urls.py рдлрд╝рд╛рдЗрд▓ рдХреЙрд▓ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред
from django.conf.urls.defaults import * from tastypie.api import Api from api.resources import EventResource, SpeakerResource v1_api = Api(api_name='v1') v1_api.register(SpeakerResource()) v1_api.register(EventResource()) urlpatterns = patterns('', (r'^api/', include(v1_api.urls)), )
рдЕрдм рд╣рдордиреЗ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛
python manage.py runserver
рдЕрдм, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдиреЗ
http: // localhost: 8000 / ap / / рдПрдВрдЯреНрд░реА / рдлреЙрд░реНрдореЗрдЯ = json рдХреЗ рдкрддреЗ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреЗрдЬ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЦреЛрд▓рдХрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд╣рд╛рдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣рдорд╛рд░реЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рдЖрд░реЗрдЦ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:
{ "events": { "list_endpoint": "/api/v1/events/" , "schema": "/api/v1/events/schema/" } ,"speakers": { "list_endpoint": "/api/v1/speakers/" ,"schema": "/api/v1/speakers/schema/" } }
рдкреНрд░рд╛рд░реВрдк рдкреИрд░рд╛рдореАрдЯрд░ рдЬрдмрд░рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдПрдкреНрд▓рд┐рдХреЗрд╢рди / json рд╢реАрд░реНрд╖рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред JSON рдХреЗ рдЕрд▓рд╛рд╡рд╛, xml, yaml, bplist рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рд╕реНрдХреАрдорд╛ рдкрддреЗ рдкрд░, рдЖрдк рдореЙрдбрд▓ рд╕рдВрд░рдЪрдирд╛ (рдХреНрд╖реЗрддреНрд░, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╡рд░рдг) рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ list_endpoint рдкрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдерд╛ред
рдЕрдм,
http: // localhost: 8000 / api / v1 / рдШрдЯрдирд╛рдУрдВ / рдкрддрд╛ рдХреЛ рдЦреЛрд▓рдХрд░,
рдкреНрд░рд╛рд░реВрдк = json рд╣рдо рдЗрд╕ рдкрд░ рдХреБрдЫ рджреЗрдЦреЗрдВрдЧреЗ:
{ "meta": { "limit": 20 ,"next": null ,"offset": 0 ,"previous": null ,"total_count": 4 } ,"objects": [ { "id": 3 ,"speaker": "/api/v1/speakers/2/" ,"start_time": "08:39:25" ,"end_time": "18:39:29" ,"title": " " ,"description": "" } ] }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ: рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛, рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЖрдХрд╛рд░, рдЖрджрд┐ред рдЙрд╕реА рд╕рдордп, рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдИрд╡реЗрдВрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдЗрд╕рдХреА рдЖрдИ рдбреА -
http: // localhost: 8000 / api / v1 / рдШрдЯрдирд╛рдУрдВ / 1 / рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо POST рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдФрд░ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде PUT рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ DELETE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, tastypie рдореЗрдВ, ModelResource рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╕реНрдкреАрдХрд░ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рддреБрд░рдВрдд рдЙрд╕рдХрд╛ рдирд╛рдо рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдз рди рдХрд░реЗрдВред EventResource рдХреНрд▓рд╛рд╕ рдореЗрдВ, рд╣рдо рдбрд┐рд╣рд╛рдЗрдбреНрд░реЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ:
def dehydrate(self, bundle): try: speaker = Speaker.objects.filter(id=bundle.obj.speaker.id) bundle.data['speaker_name'] = speaker[0].name except Speaker.DoesNotExist: pass return bundle
рдЗрд╕рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдкреАрдХрд░ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдВрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм, рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА (рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рднрд╛рдЧ рд▓рд┐рдЦреВрдВрдЧрд╛):
{ "id": 3 ,"speaker": "/api/v1/speakers/2/" ,"speaker_name": "" ,"start_time": "08:39:25" ,"end_time": "18:39:29" ,"title": " " ,"description": "" }
рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕реНрдкреАрдХрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рддрд╛рд░реНрдХрд┐рдХ рд╣реЛрдЧрд╛:
http: // localhost: 8000 / api / v1 / рдШрдЯрдирд╛рдУрдВ / рд╡рдХреНрддрд╛? = 1 рдЬреЛ рд╣рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕реНрдкреАрдХрд░ рдЖрдИрдбреА = 1 рдХреЗ рд╕рд╛рде рд╕реНрдкреАрдХрд░ рд╣реИрдВред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдореЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
filtering = { 'speaker': ALL_WITH_RELATIONS }
рдирд┐рд╖реНрдХрд░реНрд╖
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдпрджрд┐ рд▓реЗрдЦ рд░реБрдЪрд┐ рдХрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрд╣рд╛рдиреА рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рддреНрдпрд╛рдкрди, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдФрд░ рдЗрддрдиреЗ рдХрдо рд╕рдордп рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдЬрдХрдбрд╝реЗрдВред