Quickstart
我们将会创建一个简单的API,来让管理员能够查看和编辑Users和Groups。
项目开始
创建一个新的项目叫 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 ..
创建数据库:
python manage.py migrate
创建一个超级用户admin
,密码是password123
。我们将会在接下来的例子中使用这个账户。
python manage.py createsuperuser
Serializers
首先,我们将去定义一些serializer
。创建一个新的模块叫 tutorual/quickstart/serializers.py
。
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设计。
Views
马上,我们将写一些views.打开 tutorial/quickstart/views.py
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逻辑看起来更加整洁和有组织性。
URLs
现在,我们来写我们的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.这是可选的。
Settings
我们还需要设置一些全局变量。我们想启用分页和API只有Admin用户能够调用。这些设置都在 tutorial/settings.py
中:
INSTALLED_APPS = (
...
'rest_framework',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
],
'PAGE_SIZE': 10
}