本文的操作是为了快速建立一个Django项目的REST接口,然后看看效果,让你更有信心地使用这个框架。里面有很多新的概念在后面会慢慢介绍。
准备开发环境
本人平时上班时使用的是windows进行开发。这里介绍windows下的开发环境,MacOS下也是类似的。
本文假设大家都已经比较熟悉地掌握Python和Django,至少可以把Django服务起起来,自己做过一些小型网站。
使用Django REST framework来设计RESTful API,因为这个框架里面用到了six模块,Django1.4.5以上的版本才包含这个模块,所以我使用的是Django 1.4.16。安装方法:pip install django==1.4.16。
安装Django REST framework:pip install djangorestframework
Python: 使用2.7
IDE选择了PyCharm,版本是3.4。
1 创建项目
用PyCharm创建项目,名字为rest。位置自己设置,项目类型当然是Django,编译器就选择自己电脑上安装的Python 2.7.6
点“OK”以后PyCharm要求你创建一个app,我们创建一个叫"quickstart"的app。
创建完以后,项目的结构就是这个样子的:
这个里面可以创建数据库里的表了,Django数据库怎么配置可以参考官方文档。REST framework的官网上的例子用的是Django 1.7, 所以使用python manage.py migrate来生成model对应的表,然后用python manage.py createsuperuser创建超级用用户。 但是我用的是Django 1.4.16,所以命令不一样。我们在PyCharm里面选择Tools->run manage.py task,然后输入syncdb。这样就会创建表,并且提示你创建一个超级用户。
到此为止项目已经创建完成。
2 Serializers 序列化
在创建序列化,在此之前我们先创建一个model文件,路径是rest/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')
我们这里用到了一个relationship叫HyperlinkedModelSerializer,你也可以使用其他的relationship,但是hyperlinked relations是比较符合RESTful 设计规范的。
3 Views 视图
设计一个视图来展示我们的API接口。创建一个文件,路径是rest/quickstart/views.py
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
这里用了ViewSet,把所有功能相似的view放在一起。其他的地方为什么这样写可以暂时不管。
4 URLs
现在要添加url,修改rest/urls.py文件。
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)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browseable API.
urlpatterns = +[
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
要注意,这里的urlpatterns要用+=,因为你很可能还有自己其他的一些
urlpatterns参数,不能完全像官网那样用等于号。
5 Settings
修改rest/settings.py,添加一个rest_framework APP和一个REST_FRAMEWORK 变量。
INSTALLED_APPS = (
...
'rest_framework',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGINATE_BY': 10
}
6 测试接口
现在可以启动项目,测试一下接口了。在浏览器上输入http://127.0.0.1:8000/users/,看到了user的API接口。