DRF框架、实现单查群查接口
2、作用:(写接口:API)
要去settings文件中的中间件注掉,就不报错了。


结果:


结果:{'z':'3'} 没用被解析到PSOT中

结论:django写原生的接口 不支持json数据格式
3、安装
>: pip install djangorestframework

4、在settings中注册(为什么要注册,后期会讲) 看下下个博客中的
INSTALLED_APPS = [
# ...
'rest_framework',
]
5、在settings中自定义drf配置:
REST_FRAMEWORK = {}
注:drf配置查找顺序,自定义settings的REST_FRAMEWORK配置字典 => drf 默认settings的DEFAULTS
6、drf的封装特点:特点功能在特点模块下
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request

1)在models.py创建Model类
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=64, verbose_name='书名')
price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='价格')
# 配置类
class Meta:
verbose_name_plural = '图书'
def __str__(self):
return self.name


2)在admin.py中注册Model类,方便在后台(admin)可视化管理数据
from django.contrib import admin
from . import models
admin.site.register(models.Book) # admin要控制的model都需要注册一下

3)数据库迁移操作
>: python manage.py makemigrations
>: python manage.py migrate
>: python manage.py createsuperuser
admin | Admin123
4)浏览器登录admin录入数据:http://localhost:8000/admin
三、
urls.py文件中:
urlpatterns = [
# 资源books接口的设计
url(r'^books/$', views.BookAPIView.as_view()), # 群查、单增
url(r'^books/(?P<pk>\d+)/$', views.BookAPIView.as_view()), # 单查、单删、单(整体|局部)改
]

四、实现单查群查接口
from rest_framework.views import APIView from rest_framework.response import Response from . import models class BookAPIView(APIView): def _multiple_get(self): # 不能返回,数据是QuerySet[Obj, Obj],也不能强制转换list # return list(models.Book.objects.all()) # QuerySet[dict, dict] # print(models.Book.objects.values('name', 'price')) # QuerySet[tuple, tuple] # print(models.Book.objects.values_list('name', 'price')) return Response(list(models.Book.objects.values('name', 'price'))) def _single_get(self, pk): # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first()) # 开发阶段建议能用try的地方,不要使用if判断 try: return Response(models.Book.objects.values('name', 'price').get(pk=pk)) except: return Response('资源不存在') # 单查、群查 def get(self, request, *args, **kwargs): pk = kwargs.get('pk') if pk: # 单查逻辑 return self._single_get(pk) else: # 群查逻辑 return self._multiple_get()





五、APIView视图基类分析








浙公网安备 33010602011771号