一、修改配置文件
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/