Django REST框架是一个用于构建Web API的功能强大且灵活的工具包。
django版本1.11
首先使用pip安装需要的包
pip install djangorestframework
pip install markdown
pip install django-filter
然后创建项目
django-admin startproject rest_test
cd rest_test
django-admin startapp app
同步数据库
python manage.py migrate
创建一个用于登录测试的超级用户
python manage.py createsuperuser --email [email protected] -- usernaem admin
然后根据提示输入密码即可注意,这里输入的密码需要一定的复杂度,否则会创建失败
串行化即序列化,我们要定义一些序列器。创建一个名为rest_test/app/serializers.py,我们将用于数据表示的新模块。
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
field = ('url', 'username', 'email', 'groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class meta:
model = Group
field = ('url', 'name')
注意, 在这种情况下,我们使用超链接关系HyperlinkedModelSerializer。还可以使用主键和其他的关系,但超链接是良好的RESTful设计。
在rest_test/app/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
我们并不是在编写多个视图函数,而是将所有常见行为集成在一起,称为类ViewSets。如果需要,我们可以轻松的将这些视图分解为单个视图,但使用视图集可以使视图逻辑组织得非常好,并且非常简洁
在rest_test/urls.py中
from django.conf.urls import url, include
from rest_framework import routers
from app 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')),
]
因为我们使用视图集而不是视图,所以我们可以自动为我们的API生成URL_conf,只需向路由器类注册视图集。
同样,如果我们需要更多地控制API URL,我们可以简单地使用常规的基于类的视图,并明确写入URL conf。
最后,我们将包括默认的登录和注销视图即路由地址为api-auth的,以用于可浏览的API。这是可选的,如果您的API需要身份验证并且您想使用可浏览的API,则会很有用。
在settings文件中添加 ‘ rest_framework’ 到INSTALLED_APPS
INSTALLED_APPS = (
...
'rest_framework',
)
启动服务
python manage.py runserver