咱们将会建立一个简单的API,来让管理员可以查看和编辑Users和Groups。python
建立一个新的项目叫 tutorial
,而后建立一个app叫quickstart
.数据库
# 建立项目目录 mkdir tutorial cd tutorial # 建立虚拟环境,并进入虚拟环境中 virtualenv env source env/bin/activate # 安装django 和 REST framework pip install django pip install djangorestframework # 建立项目和app django-admin.py startproject tutorial cd tutorial django-admin.py startapp quickstart cd ..
建立数据库:django
python manage.py migrate
建立一个超级用户admin
,密码是password123
。咱们将会在接下来的例子中使用这个帐户。api
python manage.py createsuperuser
首先,咱们将去定义一些serializer
。建立一个新的模块叫 tutorual/quickstart/serializers.py
。app
from django.contrib.auth.models import User, Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url','username','email','groups') class GroupSerializer(serializers.HyperlinkModelSerializer): class Meta: model = Group fields = ('url','name')
注意 这里咱们使用 hyperlinked(HyperlinkedModelSerializer
)。你也能够使用primary key和各式各样其余的关系。可是 hyperlinking是一个好的RESTful设计。ui
立刻,咱们将写一些views.打开 tutorial/quickstart/views.py
url
from django.contrib.auth.models import User, Group from rest_framework import viewsets from tutorial.quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(Viewsets.ModelViewSet): """ API容许查看和编辑 用户 """ queryset = User.object.all().order_by('-data_joined') serializer_class = UserSerializer class GroupViewSet(Viewsets.ModelViewSet): """ API容许查看和编辑 组 """ queryset = Group.objects.all() serializer_class = GroupSerializer
将有共同行为的各式各样的View归为一类并称之为 ViewSets
若是咱们须要,咱们能够轻易的拆分这些View,可是使用 viewsets将会使View逻辑看起来更加整洁和有组织性。spa
如今,咱们来写咱们的API URLs.在 tutorual/urls.py
设计
from django.conf.urls import url, include from rest_framework import routers from tutorial.quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'groups', views.GroupViewSet) urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
由于咱们使用了viewsets来替代views,咱们可以自动产生咱们API的URL,只要在router中简单的注册一下咱们的viewsets。
一样,若是咱们须要更多的控制咱们的API URLs,咱们可以在简单的在下面使用常规的 class-based views,并写入url conf中。
最后,咱们使用 browsable API
来导入默认的登陆登出Views.这是可选的。rest
咱们还须要设置一些全局变量。咱们想启用分页和API只有Admin用户可以调用。这些设置都在 tutorial/settings.py
中:
INSTALLED_APPS = ( ... 'rest_framework', ) REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAdminUser', ], 'PAGE_SIZE': 10 }