Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs。
为什么要使用REST framework?
- 在线可视的API,对于赢得你的开发者们十分有用
- 可以配置各个环节,若无需更多强大的特性,使用一般基于方法(function-based)的视图(views)即可
- 大公司如同Mozilla和Eventbrite,也是忠实的使用者
1. 配置要求
REST framework 有以下的要求:
- Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
- Django (1.7+, 1.8, 1.9, 1.11)
下面是可选的包:
- Markdown (2.1.0+) - Markdown为可视化 API 提供了支持.
- django-filter (0.9.2+) - 过滤支持.
- django-crispy-forms - 为过滤,提供了改良的HTML呈现.
- django-guardian (1.1.1+) - 对象层面的权限支持.
2. 安装部署
使用pip
安装框架及所有的你需要的可选依赖包
1
2
3
|
pip install
-
i https:
/
/
pypi.doubanio.com
/
simple
/
-
-
trusted
-
host pypi.doubanio.com djangorestframework
pip install
-
i https:
/
/
pypi.doubanio.com
/
simple
/
-
-
trusted
-
host pypi.doubanio.com markdown
pip install
-
i https:
/
/
pypi.doubanio.com
/
simple
/
-
-
trusted
-
host pypi.doubanio.com django
-
filter
|
…又或者从github上clone该项目
1
|
git clone git@github.com:tomchristie
/
django
-
rest
-
framework.git
|
将 'rest_framework'
添加到你的 'INSTALLED_APPS'
设置里
1
2
3
4
|
INSTALLED_APPS
=
(
...
'rest_framework'
,
)
|
如果你需要使用可视化的API,你也许就需要添加REST Framework的登陆/登出视图。在项目的 urls.py
文件里,添加下面的内容:
1
2
3
4
|
urlpatterns
=
[
...
url(r
'^api-auth/'
, include(
'rest_framework.urls'
, namespace
=
'rest_framework'
))
]
|
3. 示例
让我们看一个简单用例:如何用REST framework 来搭建一个简单的支持modle的API
我们将创建一个读/写API,来处理我们项目中的用户信息。
任何REST framework的全局设置,都存放在一个配置字典(dictionary,有些语言如Java中的map)中,名为REST_FRAMEWORK
。
我们从以下的操作开始,把下面的内容添加到项目的settings.py
模块中:
1
2
3
4
5
6
7
|
REST_FRAMEWORK
=
{
# 使用Django的标准`django.contrib.auth`权限管理类,
# 或者为尚未认证的用户,赋予只读权限.
'DEFAULT_PERMISSION_CLASSES'
: [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
|
这是项目目录下urls.py
模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from
django.conf.urls
import
url, include
from
django.contrib.auth.models
import
User
from
rest_framework
import
routers, serializers, viewsets
# Serializers定义了API的表现.
class
UserSerializer(serializers.HyperlinkedModelSerializer):
class
Meta:
model
=
User
fields
=
(
'url'
,
'username'
,
'email'
,
'is_staff'
)
# ViewSets 定义了 视图(view) 的行为.
class
UserViewSet(viewsets.ModelViewSet):
queryset
=
User.objects.
all
()
serializer_class
=
UserSerializer
# Routers 提供了一种简单途径,自动地配置了URL。
router
=
routers.DefaultRouter()
router.register(r
'users'
, UserViewSet)
# 使用自动的URL路由,让我们的API跑起来。
# 此外,我们也包括了登入可视化API的URLs。
urlpatterns
=
[
url(r
'^'
, include(router.urls)),
url(r
'^api-auth/'
, include(
'rest_framework.urls'
, namespace
=
'rest_framework'
))
]
|
启动项目 python manage runserver 8000 浏览器 http://127.0.0.1:8000/里,打开新建的’users’ API了
使用右上角的登陆控制,可以对系统用户进行新增和删除操作