一、什么是REST框架
1.REST的含义
rest即Representational State Transfer的缩写。这个词组的翻译是"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构。
2.REST的好处的
就目前来说,RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
3.REST的示例
在网页上REST的最直观的展示,以本地创建的一个示例为例
http://127.0.0.1:8000/,在后面加入‘/’再加上自己的模型块如
http://127.0.0.1:8000/api/District 这就是一个简单的基本的REST的框架结构
4.REST框架下的接口
现在我们的目的就是搭建一个简单的接口,满足REST框架下的接口用来网页前端获取数据。
二、实际中使用REST框架搭建示例
首先依旧是使用python来创建好一个django的工程并能成功运行开启网页,目前而言我们假设他的名字为apidemo,会的得到以下的文件,其中apidemo现实的文件夹为我们的django的基本配置,而common的文件夹为其中视图模型类的应用文件夹。
下面的步骤我们是要从数据库中获取一个叫做district的数据
1.settings上的调整
接下来我们需要对于其中的文件进行一些设置上的调整,首先要在settings.py文件中找到INSTALLED_APPS这个选项,然后倒入模型文件夹
其次我们需要使用第三方库REST_FRAMEWORK来自动是我们创建的网页具备REST框架的要求。安装导入后可以继续在settings.py的文件中加入以下代码
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 5,
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'anon': '5/min',
},
}
REST_FRAMEWORK_EXTENSIONS = {
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 120,
'DEFAULT_USE_CACHE': 'default',
'DEFAULT_OBJECT_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_object_cache_key_func',
'DEFAULT_LIST_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_list_cache_key_func',
}
接下来可以修改DATABASES导入自己的数据库进行测试
2.urls地址的修改
首先我们需要一个新的页面如他的视图函数index
urlpatterns = [
path('api/', include('common.urls')),
]
在此,我们不需要创建一个网页,只需要通过获取数据及观察获取数据的网址来确定REST的构架是否右问题。函数需要在视图中进行封装,下方的'api/', include('common.urls')代表着REST框架下方网页的地址,从common的文件夹中的地址,这样方便区分。接下来就是设置common.urls,
urlpatterns = [
path('districts/<int:distid>/', get_district),
]
3.views的网页视图的渲染
我们需要在视图函数中封装一个函数直接引用
@api_view(('GET', )) #数据接口装饰器
def get_district(request, distid):
"""获取行政区域详情"""
district = District.objects\
.filter(distid=distid).defer('pid').first()#从数据库表中获取到相关的行政区
serializer = DistrictDetailSerializer(district)#对于获取的行政区进行排序
return Response(serializer.data)
然后需要在工程中统计目录创建一个序列化的文件,里面封装序列化的函数
class DistrictDetailSerializer(serializers.ModelSerializer):
"""行政区域详情序列化器"""
cities = serializers.SerializerMethodField()
@staticmethod
def get_cities(district):
queryset = District.objects.filter(pid=district.distid)#对数据进行筛选
return DistrictSimpleSerializer(queryset, many=True).data
class Meta:
model = District#导入District的模型
exclude = ('pid', )#exclude代表除去此项选择其他项
接下来打开网页地址输入自己的网址加上/api/districts/即可得到想要的数据。并在之后‘/api/districts/加上id’也可以获取更加详细的数据
这样一个简单的满足REST构架的数据接口就已经做好了。