快速入门

我们将创建一个简单的API 用于admin用户,在系统中 查看和编辑用户和组信息.

创建项目

创建一个叫tutorial  的项目 , 然后创建一个app 叫   quickstart

# 创建项目目录mkdir tutorialcd tutorial################## 这里是非必须的 ################# 创建一个虚拟环境,来隔离我们创建的包 的本地依赖, virtualenv envsource env/bin/activate  # On Windows use `env\Scripts\activate`# 安装django 和django REST framework 到虚拟环境pip install djangopip install djangorestframework############################################## 创建一个新的项目 作为一个独立的程序django-admin.py startproject tutorial .  # Note the trailing '.' charactercd tutorialdjango-admin.py startapp quickstart

现在同步数据库

python manage.py makemigrationspython manage.py migrate

我们还将创建一个用户名为 admin 初始用户,密码为 password123 .稍后我们会在我们的例子中验证我们的用户.

python manage.py    createsuperuser

一旦 建立数据库 并创建初始用户 这些你准备好了, 那么 打开app的目录, 我们要开始写代码了.....

Serialiazers ( 序列化器)

首先我们要定义一些序列化器, 让我们创建一个叫  tutorial/quickstart/serializers.py  的新模块.

代码如下:

from django.contrib.auth.models import User, Groupfrom rest_framework import serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = User        fields = ('url', 'username', 'email', 'groups')        class GroupSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = Group        fields = ('url', 'name')

注意: 

    在这个例子中,我们使用了超链接关系 -- HyperlinkedModelSerializer , 你也可以使用  primary key 和其他各种关系.  不过 使用超链接 是比较好的 RESTful 设计方式.

views (视图)

好的, 现在我们最好写一些views了, 打开 tutorial/quickstart/views.py  然后输入如下内容:

from django.contrib.auth.models import User, Groupfrom rest_framework import viewsetsfrom tutorial.quickstart.serializers import UserSerializer, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):    """    API endpoint that allows users to be viewed or edited.    """    queryset = User.objects.all().order_by('-date_joined')    serializer_class = UserSerializer    class GroupViewSet(viewsets.ModelViewSet):    """    API endpoint that allows groups to be viewed or edited.    """    queryset = Group.objects.all()    serializer_class = GroupSerializer

与其写多个views ,不如把所所有的常见的行为进行分组,写到一个叫 ViewSet  的类里.

如果有需要我们,可以很容易的把这些分成独立的views ,但是使用 viewsets 可以保持view 逻辑的井井有条   和代码的清晰.

URLs

Okay, 现在我们向 tutorial/urls.py 文件中 配置 API URLs . 

from django.conf.urls import url, includefrom rest_framework import routersfrom tutorial.quickstart import viewsrouter = routers.DefaultRouter()router.register(r'users', views.UserViewSet)router.register(r'groups', views.GroupViewSet)# Wire up our API using automatic URL routing.# Additionally, we include login URLs for the browsable API.urlpatterns = [    url(r'^', include(router.urls)),    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))]

由于我们使用了viewsets 而不是views , 我们可以通过使用一个router类  简单的注册viewsets  来为我们的 API 生成 URL 配置.

同样,如果需要对API URLs进行更多的操作,可以使用 基于views 的普通类,并明确的写入URL 配置里.

最后,我们保留默认的登陆注销views,供可浏览的API来使用.  这个是可选的,  除非你的 API 需要 身份验证并且你想使用可 浏览的API

setting 

我们还想设置一些全局配置 ,我们想打开分页功能, 希望我们的API仅可以被admin 用户连接, 

需要设置的模块是: tutorial/settings.py

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

好了 ,到这里我们就做完了

测试我们的API

现在我们准更好了测试我们已经建立好的API ,从命令行启动我们的server

python manage.py runserver

现在我们可以链接我们的api ,无论是命令行 还是像curl一样的工具

bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 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"        }    ]}

使用 命令行工具 httpie

bash: http -a admin:password123 http://127.0.0.1:8000/users/HTTP/1.1 200 OK...{    "count": 2,    "next": null,    "previous": null,    "results": [        {            "email": "admin@example.com",            "groups": [],            "url": "http://localhost:8000/users/1/",            "username": "paul"        },        {            "email": "tom@example.com",            "groups": [                ],            "url": "http://127.0.0.1:8000/users/2/",            "username": "tom"        }    ]}

直接通过浏览器访问

Quick start p_w_picpath

通过浏览器使用时,确认你使用了右上角的登陆按钮进行了登陆

这里就可以说 so easyle 

如果你想从头到尾更深入的了解REST framework 点击下面的链接:

 

.