以下内容为原创,转载请注明出处!
现在是个项目就需要API接口的时代,往往大家写API都有着自己的风格,而我们django却早有了解决api开发和自测的一套黑科技,我相信很多人都知道:django-rest-framework(主打接口序列化)+django-rest-swagger(主打接口ui)。该文章就为大家介绍怎么用这黑科技:【点我代码下载】
1: 老规矩,安装插件
pip install django-rest-framework pip install django-rest-swagger==0.3.5
注:后面配置url时出现错误:No modul name urls,解决方法就是上面指定版本0.3.5,前提是你的django版本 < 1.9
2: 准备开始码代码了
创建项目(过程省略),最终文件目录结构如下图:
setting.py:
INSTALLED_APPS中添加:rest_framework,rest_framework_swagger
django_api/urls.py:
urlpatterns += patterns('',
url(r'^api/', include('webuser.urls'))
) 新建文件serializers.py:
from rest_framework import serializers
from .models import UserBase
class UserBaseSerializer(serializers.ModelSerializer):
class Meta:
model = UserBase
fields = ('id','mobile','desc')
#fields = '__all__' 表示最终序列化返回的所有字段 webuser/urls.py:
from rest_framework import routers
urlpatterns = patterns('webuser.views',
url(r'^usercreate/$', UserBaseCreate.as_view(), name='usercreate'),
url(r'^userlist/$', UserBaseList.as_view(), name='userlist'),
url(r'^userdetail/(?P<pk>[0-9]+)/$', views.user_detail, name='user_detail'),
url(r'^userdetail/(?P<pk>[0-9]+)/$', UserBaseDetail.as_view(), name='user_detail'),
url(r'^docs/$', include('rest_framework_swagger.urls')) #这里报错的话请查看前面的说明(红色字体说明)
) webuser/views.py:
# -*- coding: utf-8 -*- from rest_framework.decorators import api_view from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from .models import UserBase from .serializers import UserBaseSerializer from rest_framework import generics from rest_framework import viewsets #第一种方法 class UserBaseList(APIView): def get(self, request, format=None): users = UserBase.objects.all() serializer = UserBaseSerializer(users, many = True) return Response(serializer.data) def post(self, request, format=None): serializer = UserBaseSerializer(data = request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status = status.HTTP_201_CREATED) else: return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST) # 通用方法 class UserBaseCreate(generics.ListCreateAPIView): queryset = UserBase.objects.all() serializer_class = UserBaseSerializer class UserBserDetail(generics.ListCreateAPIView): serializer_class = UserBaseSerializer def get(self, request, *args, **kwargs): user = UserBase.objects.get(pk = kwargs["pk"]) serializer = UserBaseSerializer(user) return Response(serializer.data, status = status.HTTP_201_CREATED) def post(self, request, *args, **kwargs): serializer = UserBaseSerializer(data = request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status = status.HTTP_201_CREATED) else: return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST) # # 装饰器 # @api_view(['GET','POST']) # def user_detail(request, pk): # try: # user = UserBase.objects.get(pk = pk) # except Exception, e: # return Response(status = status.HTTP_404_NOT_FOUND) # if request.method == 'GET': # serializer = UserBaseSerializer(user) # return Response(serializer.data) # if request.method == 'POST': # serializer = UserBaseSerializer(data = request.data) # if serializer.is_valid(): # serializer.save() # return Response(serializer.data, status = status.HTTP_201_CREATED) # else: # return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
3:查看效果
python manage.py runserver 0.0.0.0:9007
在浏览器中打开 127.0.0.1:9007/api/docs/你会看到黑科技效果;
django-rest-framework :
django-rest-framework+ django-rest-swagger效果图: