以下内容为原创,转载请注明出处!  

    现在是个项目就需要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效果图