środa, 12 listopada 2014

Django + Rest = power cz3

Kolejny post o Django z RESTem, lecz tym razem już będę implementował prosty przykład. Postanowiłem zrobić prosty system wyświetlający pole do wypełnienia o użytkowniku, czyli wziąłem pierwszy i przykład ze stronki o RESTfulu z Django. Jestem w tej sprawie troszkę zielony, więc muszę zaczynać od prostych przykładów.
Początkowo skupie się od razu nad konfiguracją już przygotowanej struktury do tworzenia aplikacji MVC i tak jak już otworzyłem swoje Ninja IDE to przystępie od tworzenia nowego moduły o nazwie: serializers.py, . Poniżej jest pokazany kod tego pliku.

1:  from django.contrib.auth.models import User, Group  
2:  from rest_framework import serializers  
3:  """  
4:  This class define 3 fields  
5:  """  
6:  class UserSerializer(serializers.HyperlinkedModelSerializer):  
7:    class Meta:  
8:      model = User  
9:      fields = ('url', 'username', 'email', 'groups')  
10:  """  
11:  Bext class generate anotger fields ;)  
12:  """  
13:  class GroupSerializer(serializers.HyperlinkedModelSerializer):  
14:    class Meta:  
15:      model = Group  
16:      fields = ('url', 'name')  
Teraz skonfiguruje środowisko by korzystał z frameworka RESTowego, czyli muszę edytować plik settings.py. Na początku do INSTALLED_APPS dodaje:
1:  'rest_framework',   
I jeszcze pod koniec lub w dowolnym miejscu pliku, definiuje odwołanie do odwołanie do resta:
1:  REST_FRAMEWORK = {  
2:    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),  
3:    'PAGINATE_BY': 10  
4:  }  
Teraz przechodzę do pierwszego testu. Posłużę się poleceniem
1:  python ./manage.py runserver  
Okazało się, że zapomniałe skonfigurowac pliku urls.py, który prawidłowo powinien wyglądac tak:
1:  from django.conf.urls import url, include  
2:  from django.contrib.auth.models import User  
3:  from rest_framework import routers, serializers, viewsets  
4:  # Serializers define the API representation.  
5:  class UserSerializer(serializers.HyperlinkedModelSerializer):  
6:    class Meta:  
7:      model = User  
8:      fields = ('url', 'username', 'email', 'is_staff')  
9:  # ViewSets define the view behavior.  
10:  class UserViewSet(viewsets.ModelViewSet):  
11:    queryset = User.objects.all()  
12:    serializer_class = UserSerializer  
13:  # Routers provide an easy way of automatically determining the URL conf.  
14:  router = routers.DefaultRouter()  
15:  router.register(r'users', UserViewSet)  
16:  # Wire up our API using automatic URL routing.  
17:  # Additionally, we include login URLs for the browseable API.  
18:  urlpatterns = [  
19:    url(r'^', include(router.urls)),  
20:    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))  
21:  ]  
Teraz jeszcze raz uruchamiam test, czyli uruchomienie serwera pythona na porcie 8000 i zależnie od tego jak skonfigurujemy serwer bazy danych to powinniśmy dostać podobny wynik do tego:
Brakuje mi jeszcze widoku, który powinien wyglądac tak:
1:  from django.contrib.auth.models import User, Group  
2:  from rest_framework import viewsets  
3:  from tutorial.quickstart.serializers import UserSerializer, GroupSerializer  
4:  class UserViewSet(viewsets.ModelViewSet):  
5:    """  
6:    API endpoint that allows users to be viewed or edited.  
7:    """  
8:    queryset = User.objects.all()  
9:    serializer_class = UserSerializer  
10:  class GroupViewSet(viewsets.ModelViewSet):  
11:    """  
12:    API endpoint that allows groups to be viewed or edited.  
13:    """  
14:    queryset = Group.objects.all()  
15:    serializer_class = GroupSerializer  
Teraz jest już wszystko i jestem gotowy do rozpoczęcia przygody z RESTem na poważnie, czyli od razu pójdę na głęboką wodę i rozpocznę z moimi kumplami/kumpelą od razu aplikacje RESTową i ps. zacznę pracować na Linuxie, bo ja nie lubię troszkę Windowsa. Następny post będzie o tym jak zagłębić się w podstawy języka C i poznać go troszkę od środka, a następny post tego o Django + REST pojawi się tylko jak wymagania rozbite będą na zadania.

Brak komentarzy:

Prześlij komentarz