Django_REST Framework -1.快速上手

Django REST Framework 快速上手

背景

这几天正好在研究 RESTful 的方式来写 API,然后上手 Django REST 框架。

Django REST Framework (以下简称 DRF )是一个轻量级的库,熟悉 Django 的话可以很容易的用它来构建 Web API。

安装前提

Django REST Framework 安装需要以下前提:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5)
  • Django (1.7+, 1.8, 1.9)

我自己的环境是:

  • Python 2.7.10
  • Django 1.8.2

安装配置

安装 DRF 需要用到 pip 命令

pip install djangorestframework
pip install markdown    # Markdown support for the browsable API.
pip install django-filter   # Filtering support

或者在 GitHub 上 clone 它

git clone [email protected]:tomchristie/django-rest-framework.git

接着在 Django Project 根目录的 setting.py 文件中的 INSTALLED_APPS 加入 'rest_framework'

INSTALLED_APPS = (
    ...
    'rest_framework',
)

如果你要使用 DRF 的 browsable API 的话,你可能还需要添加 REST 框架的登录登出视图 ( views ),辣么需要在 url.py 文件中加入以下代码:

urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

注: 这个 URL 地址可以是任意的,但是必须 include 'rest_framework.urls' 和 namespace='rest_framework' 。

举个栗子

现在我们来看一下一个简单的用 DRF 来构建一个模型支持较好的 API 的栗子。

任何一个对 REST 框架的全局设置都被放在 REST_FRAMEWORK 的模块内,所以你需要在 settings.py 文件中添加以下代码来通过 REST_FRAMEWORK 入口进行全局设置:

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

现在我们可以构建 API 了,编辑 Django 项目根目录的 url.py 文件:

from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'is_staff')

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# 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'))
]

解释一下,

每个 xxxSerializer 都要继承 ModelSerializer 来选择模型和模型字段。

UserSerializer 类继承了更符合 RESTful 设计的 HyperlinkedModelSerializer 超链接模型 Serializer 类,它和普通的 ModelSerializer 类有以下区别:

  • 缺省状态下不包含 pk 字段
  • 具有一个 url 字段,即HyperlinkedIdentityField类型
  • 用HyperlinkedRelatedField表示关系,而非PrimaryKeyRelatedField

然后在 class Meta 中选择模型和要展现的模型元素

ViewSet 用来定义 View 的行为,和 Django 的 views 类似,用来处理 API 的 read 、write、 update 等方法(而 Django views 则处理 http 的 GET 和 POST )

在 ViewSet 实例化之后,通过 Router 类,最终将 URL 和 ViewSet 方法绑定起来。

ok,现在你可以通过在浏览器中访问 http://127.0.0.1:8000/ 来查看你的 'users' API 了。

https://github.com/thehackercat/django-rest-framework-tutorial/blob

你可能感兴趣的:(Django_REST Framework -1.快速上手)