简介
Django REST framework是一款用于构建Web APIs的强大而灵活的工具。
它有以下几点优势:
- 拥有对开发者有巨大作用的可浏览的Web API页面
- 包含了OAuth1a和OAuth2a的认证策略
- 序列化器可以兼容序列化支持ORM和不支持ORM的数据源
- 高度可定制化.如果你不需要更多强大特性的话也可以仅适用常规的基于视图的方法
- 可扩展的文档和巨大的社区支持
- 已经被很多国际知名的公司适用,包括 Mozilla, Red Hat, Heroku, and Eventbrite.
安装需求:
- Python (3.5,3.6,3.7,3.8,3.9)
- Django (2.2,3.0,3.1)
- 备注:这里更低版本也是支持的,django1.8、python2.7
我们强烈建议并且官方只会支持python和django最新的每个版本。
以下的包是可选的:
- PyYAML, uritemplate (5.1+, 3.0.0+) -支持生成模式.
- Markdown (3.0.0+) - 对可浏览API提供MarkDown语法支持.
- Pygments (2.4.0+) - Markdown语法高亮.
- django-filter (1.0.1+) - 搜索支持.(这个很好用)
- django-guardian (1.1.1+) - 对象级权限控制.
安装
1、适用pip安装必选和可选的包
pip install djangorestframework
pip install markdown # 支持markdown语法.
pip install django-filter # 支持搜索
2、直接clone整个project,并像普通app一样安装在django项目中
git clone https://github.com/encode/django-rest-framework
# 安装app
INSTALLED_APPS = [
...
'rest_framework',
]
注意,如果你想在浏览器里打开web API视图,你需要添加rest framework的登录和退出视图。将如下路径添加到你django项目的根urls.py文件里
# 这个路径可以是你自定义的
urlpatterns = [
path('api-auth/', inculde('rest_framework.urls'))
]
简单示例
下面,我们将快速构建一个简单的rest framework的API。
我们会创建一个具有增删改查功能的用于管理项目用户的API。
REST framework的所有全局设置都在一个单独的叫REST_FRAMEWORK的字典里,这个字典需要放在你项目的settings.py文件里。
1、创建django项目,按照上面要求安装相关库。
2、修改settings文件。将 rest_framework 加入 INSTALLED_APPS中。同时添加如下设置。
# settings.py文件
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'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'
]
}
下面依次是你的序列化器、视图和urls。(这里全部写在urls文件里即可)
# urls文件
from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
# Serializers define the API representation.
# 这里序列化器,决定了API的表现形式。就是接收和展示的数据
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'is_staff']
# ViewSets define the view behavior.
# ViewSets定义了API的行为。即对数据的操作
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Routers provide an easy way of automatically determining the URL conf.
# Routers提供了一个简单的自动匹配路由的方法
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.
# 这里使用routers自动匹配路由,这里可以匹配到UserViewSets
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
你可以通过在浏览器中访问127.0.0.1:8000/来快速访问你的API,如果你在右上角进行了登录(登录需要先创建django内置认证模块的管理员)。你就可以新增、删除系统里的用户了。