Django рдмрд╛рдХреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡реЗрдм рдПрдкреАрдЖрдИ

рд╡реЗрдм рд╕реЗрд╡рд╛ (Engред рд╡реЗрдм рд╕реЗрд╡рд╛) - рдорд╛рдирдХреАрдХреГрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдПрдбреНрд░реЗрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреА рдЬрд╛рддреА рд╣реИред рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (XML, JSON, рдЖрджрд┐) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдФрд░ рддреГрддреАрдп-рдкрдХреНрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╕реЗрд╡рд╛-рдЙрдиреНрдореБрдЦ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рдХреА рдПрдХ рдЗрдХрд╛рдИ рд╣реИред

рд╡реЗрдм рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрд╛рдХреА рд╣реИред
рдЖрд░рд╛рдо рдХрд░реЛ ред REST рдбреЗрдЯрд╛ рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдкреЛрдВ (рдЬреИрд╕реЗ HTML, XML, JSON) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдЬреИрд╕реЗ HTTP) рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рдд рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗ рдХреЗ рдмреАрдЪ рд░рд╛рдЬреНрдп рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


Django REST рдлреНрд░реЗрдорд╡рд░реНрдХ, Django рдврд╛рдВрдЪреЗ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИред

рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ:
рдЕрдЬрдЧрд░ (реи.рем, реи.th)
Django (1.3, 1.4, 1.5)

рдЕрдиреБрд░реЛрдз рдкрд░:
Markdown
PyYAML
Django рдлрд┐рд▓реНрдЯрд░

рд╕реНрдерд╛рдкрдирд╛

рдЖрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдЗрдк рдХрдорд╛рдВрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
pip install djangorestframework 

рдФрд░ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
 pip install markdown pip install pyyaml pip install django-filter 


рдпрд╛ рдЬреАрдердм рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдХреНрд▓реЛрди рдмрдирд╛рдПрдВ:
 git clone git@github.com:tomchristie/django-rest-framework.git cd django-rest-framework pip install -r requirements.txt pip install -r optionals.txt 


INSTALLED_APPS рдореЗрдВ рдЖрд╡реЗрджрди рджрд░реНрдЬ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:
 INSTALLED_APPS = ( ... 'rest_framework', ) 


рдФрд░ urls.py рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рднреА рдЬреЛрдбрд╝реЗрдВ:
 urlpatterns = patterns('', ... url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ) 

Url рдХреЛ рдЖрдкрдХреА рдкрд╕рдВрдж рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ urls рдмрд╛рдХреА рдврд╛рдВрдЪреЗ (rest_framework.bls) рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред

рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХреБрдЫ Serializers рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 from django.contrib.auth.models import User, Group, Permission from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): permissions = serializers.ManySlugRelatedField( slug_field='codename', queryset=Permission.objects.all() ) class Meta: model = Group fields = ('url', 'name', 'permissions') 


рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 from django.contrib.auth.models import User, Group from rest_framework import generics from rest_framework.decorators import api_view from rest_framework.reverse import reverse from rest_framework.response import Response from quickstart.serializers import UserSerializer, GroupSerializer @api_view(['GET']) def api_root(request, format=None): """ The entry endpoint of our API. """ return Response({ 'users': reverse('user-list', request=request), 'groups': reverse('group-list', request=request), }) class UserList(generics.ListCreateAPIView): """ API endpoint that represents a list of users. """ model = User serializer_class = UserSerializer class UserDetail(generics.RetrieveUpdateDestroyAPIView): """ API endpoint that represents a single user. """ model = User serializer_class = UserSerializer class GroupList(generics.ListCreateAPIView): """ API endpoint that represents a list of groups. """ model = Group serializer_class = GroupSerializer class GroupDetail(generics.RetrieveUpdateDestroyAPIView): """ API endpoint that represents a single group. """ model = Group serializer_class = GroupSerializer 

рд╣рдордиреЗ api_root рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ API рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред рдФрд░ рдЪрд╛рд░ рд╡рд░реНрдЧреЛрдВ, рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

Urls.py рдкрд░ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ

 from django.conf.urls import patterns, url, include from rest_framework.urlpatterns import format_suffix_patterns from quickstart.views import UserList, UserDetail, GroupList, GroupDetail urlpatterns = patterns('quickstart.views', url(r'^$', 'api_root'), url(r'^users/$', UserList.as_view(), name='user-list'), url(r'^users/(?P<pk>\d+)/$', UserDetail.as_view(), name='user-detail'), url(r'^groups/$', GroupList.as_view(), name='group-list'), url(r'^groups/(?P<pk>\d+)/$', GroupDetail.as_view(), name='group-detail'), ) # Format suffixes urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'api']) # Default login/logout views urlpatterns += patterns('', url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ) 

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рдореВрд╣-рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рдкрддреНрд░ {рдореЙрдбрд▓рдирд╛рдо} -рдбреЗрдЯ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
Format_suffix_patterns рдореЗрдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддреНрдпрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рд╕реЗрдЯрд┐рдВрдЧ

 INSTALLED_APPS = ( ... 'rest_framework', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 'PAGINATE_BY': 10 } 


рдкрд░рд┐рдгрд╛рдо

рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ:
 bash: curl -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/ { "count": 2, "next": null, "previous": null, "results": [ { "email": "admin@example.com", "groups": [], "url": "http://127.0.0.1:8000/users/1/", "username": "admin" }, { "email": "tom@example.com", "groups": [ ], "url": "http://127.0.0.1:8000/users/2/", "username": "tom" } ] } 


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рд╕рдВрджрд░реНрдн:
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд▓
Github

PS django рдореЗрдВ рдЖрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░ рдмреБрд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ django-piston рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

Source: https://habr.com/ru/post/In160117/


All Articles