发现README和普通md文件有不一样的地方。。蒙蔽了,列表全是错的(然后发现印象笔记都不能分享了,有关部门通知的。。
知道有这个东西,干看文档没看出个一二三来,然后按照官方示例试了试,发现挺好理解的~
- 前者是基于Python的一个web框架,后者是基于Django实现的一个RESTful框架(名字上就很直观),至于什么是RESTful架构请看链接,关于RESTful API的设计请看链接
- 这个框架的优势相对于Django在哪里呢?看官方定义:Django REST framework is a powerful and flexible toolkit for building Web APIs. 是一套构建web API的灵活的工具.也就是说构建API的时候非常方便,具体怎么方便看下面~
PS:其实我开始也很好奇是什么意思,之前一直在用Django,也知道REST,然后写的接口也是在按照这个原则来写的,为什么又多了个DRF呢?我也十分不理解,然后就有了这个项目(其实只是按照官方文档做了一下就大概了解了)
快速入门(摘自官方文档)
REST framework requires the following:
- Python (2.7, 3.2, 3.3, 3.4, 3.5)
- Django (1.7+, 1.8, 1.9)
The following packages are optional:
- Markdown (2.1.0+) - Markdown support for the browsable API.
- django-filter (0.9.2+) - Filtering support.
- django-crispy-forms - Improved HTML display for filtering.
- django-guardian (1.1.1+) - Object level permissions support.
目前只是实验性质,所以只安装必要的那2个就可以了,详细见requirements.txt
- Install using pip, including any optional packages you want...
pip install djangorestframework
pip install markdown
pip install django-filter
- Add rest_framework to your INSTALLED_APPS setting(默认创建了Django项目,没有创建使用django-admin startproject xxx命令来创建,同时python manage.py migrate数据库,创建superuser等).
INSTALLED_APPS = (
'rest_framework',
)
- If you're intending to use the browsable API you'll probably also want to add REST framework's login and logout views. Add the following to your root urls.py file.
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))]
准备工作前边已经做完了,下面开始正式的例子,利用DR创建一个关于自带的User Model的API,实现的功能是创建user和获取user列表。
- DRF全局配置放在一个名为REST_FRAMEWORK的字典中,字典放在settings.py下面,如下:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGE_SIZE': 10
]
}
- 使用django-admin startapp xxx命令创建一个Django app,本文使用quickstart名称。
- define some serializers(不知道怎么翻译这个词比较好).创建
quickstart/serializers.py
文件,内容如下:
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')
- 修改views.py
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
- 修改urls
from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]