Django Rest_framework使用实例

一、修改配置文件

setting.py:

1、添加app。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'api'
]

2、添加rest_framework的全局配置。

REST_FRAMEWORK = {
    # 全局使用的认证类
    "DEFAULT_AUTHENTICATION_CLASSES": ['user.utils.auth.Authtication', ],
    "UNAUTHENTICATED_USER": None,
    "UNAUTHENTICATED_TOKEN": None,
    "DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
    "DEFAULT_VERSION": '',
    "ALLOWED_VERSIONS": ['v1', 'v2'],
    'PERMISSION_CLASSES': [],
    "VERSION_PARAM": 'version',
    "DEFAULT_RENDERER_CLASSES": [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ]
}

3、配置解决跨域问题。

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*'
)
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'POST',
    'PUT',
)
CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requestd-with',
)

二、定义路由

urls.py:

url(r'^(?P<version>[v1|v2]+)/com/$', views.DepView.as_view({'get': 'list', 'post': 'create'})),
url(r'^(?P<version>[v1|v2]+)/com/(?P<pk>\d+)/$',
        views.DepView.as_view({'get': 'retrieve', 'delete': 'destroy', 'put': 'update', 'patch': 'partial_update'})),

注意:rest url的写法view.视图名称.as_view({'请求方法':'视图中的名称'})

三、定义序列化类对象。

serializer.py:

class ComSerializer(serializers.ModelSerializer):    # 继承ModelSerializer序列化模型类
    class Meta:
        model = models.Company     # 序列化的模型类对象
        # fields = ['id', 'name', 'phone', 'email']      # 定义需要序列的参数(方法一)
        # fields = "__all__"     # 序列化所有参数(方法二)
        exclude=['addr']     # 序列化所有参数,排除本参数(方法三)
        depth = 1    # 关联外键的深度

四、定义分页的配置。

method.py:

class PageNumber(PageNumberPagination):
    page_size = 5     # 分页的条数
    page_size_query_param = 'size'   # 分页的参数命名
    max_page_size = 5
    page_query_param = 'page' # 分页的参数命名

五、定义视图函数。

views.py:

class ComView(ModelViewSet):
    """公司视图"""
    queryset = models.Company.objects.all()    # 关联的模型类
    serializer_class = ComSerializer   # 序列化函数
    pagination_class = PageNumber()   # 分页函数

    def list(self, request, *args, **kwargs):
        """
           获取公司列表信息
        """
        # 获取的数据分页处理
        pager_com = self.pagination_class.paginate_queryset(queryset=self.queryset,
                                                            request=request, view=self) 
        # 序列化分页后的数据(若序列化单条数据,many=False)
        ser = self.serializer_class(instance=pager_com, many=True)
        # 返回分页后的序列化对象
        return self.pagination_class.get_paginated_response(ser.data)

、浏览数据。

http://127.0.0.1:8000/user/v1/com/

猜你喜欢

转载自blog.csdn.net/weixin_43692357/article/details/88032642
今日推荐