博客大巴,交通路况实时查询,长长的望远镜
RESTful是一种开发理念,REST是Roy Thomas Fileding在他博文提出的.REST特点;url简洁,将参数通过url传递到服务器,简单就是说URL定位资源,用HTTP动词描述操作.
API接口应该部署到专用的域名下,如果API不需要扩展,可以放到主域名下,API版本号放到URL中或者放到请求头信息中,路径就是表示API的具体网站,每个网站都有对应的资源,API中的名词应该使用复数,
?limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?page=2&per_page=100:指定第几页,以及每页的记录数。 ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?animal_type_id=1:指定筛选条件
github(api.github.com)
访问第一个
# 路由 urlpatterns = [ url(r'^games/$', views.GamesAPIView.as_view()), url(r'^games/(?P<id>\d+)/$', views.GameAPIView.as_view()) ]
class GamesAPIView(View): """ 查询所有的游戏 """ def get(self, request): games = GameInfo.objects.all() game_list = [] for game in games: game_list.append({ 'id': game.id, 'gtitle': game.gtitle, 'game_date': game.game_date, 'game_download': game.game_download, 'gcommnet': game.gcommnet, 'image': game.image.url if game.image else '' }) # 要命令序列化就需要把safe设置成False return JsonResponse(game_list, safe=False) def post(self, request): """ 新增游戏 :param request: :return: """ body_data = request.body data_str = body_data.decode() game_dict = json.loads(data_str) game = GameInfo.objects.create( gtitle=game_dict['gtitle'], game_date= game_dict['game_date'], ) return JsonResponse({ 'id': game.id, 'gtitle': game.gtitle, 'game_date': game.game_date, 'game_download': game.game_download, 'gcommnet': game.gcommnet, 'image': game.image.url if game.image else '' }, status=201) class GameAPIView(View): def get(self, request, id): """ 获取单个游戏的信息 :param request: :param pk: :return: """ try: game = GameInfo.objects.get(id=id) except GameInfo.DoesNotExist: return HttpResponse(status=404) print(game) return JsonResponse({ 'id': game.id, 'gtitle': game.gtitle, 'game_date': game.game_date, 'game_download': game.game_download, 'gcommnet': game.gcommnet, 'image': game.image.url if game.image else '' }) def put(self, request, id): """ 修改游戏信息 :param request: :param pk: :return: """ try: game = GameInfo.objects.get(id=id) except GameInfo.DoesNotExist: return HttpResponse(status=404) body_data = request.body data_str = body_data.decode() game_dict = json.loads(data_str) game.gtitle = game_dict['gtitle'] game.game_date = game_dict['game_date'] game.save() return JsonResponse({ 'id': game.id, 'gtitle': game.gtitle, 'game_date': game.game_date, 'game_download': game.game_download, 'gcommnet': game.gcommnet, 'image': game.image.url if game.image else '' }) def delete(self, request, pk): """ 删除游戏 :param request: :param pk: :return: """ try: game = GameInfo.objects.get(id=id) except GameInfo.DoesNotExist: return HttpResponse(status=404) game.delete() return HttpResponse(status=204)
1.将数据转换成模型类的对象(将前端的数据,反序列化为模型类对象,保存到数据库中)
2.将模型类的对象转换为响应的数据
3.操作数据库(将数据库数据序列化为前端需要的格式)
把将一种对象的状态信息装换成可以存储或者可以传输形式的过程,比如将模型类转换成JSON数据,整个过程将序列化(序列化和反序列化执行的过程相似的,也就是可以封装代码)
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论