快速入门
我们将创建一个简单的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" } ]}
直接通过浏览器访问
通过浏览器使用时,确认你使用了右上角的登陆按钮进行了登陆
这里就可以说 so easyle
如果你想从头到尾更深入的了解REST framework 点击下面的链接:
,
.