Django-rest-framework
2018-08-03 21:19
246 查看
django-rest-framework简介
django-rest-framework,是一套基于Django 的 REST 框架,是一个强大灵活的构建 Web API 的工具包
官网:http://www.django-rest-framework.org/
使用django restful framework的原因
image 图片保存的是相当队列,访问的时候需要加上http://域名+图片相对路径
serializers没有帮我们加上,但是django rest framework帮我加上
serializers也没有排序,django rest framework帮我排序
文档生成等等很多功能
安装依赖的包
安装coreapi命令:pip install coreapi
安装django-guardian命令:pip install django-guardian
安装djangorestframewrok命令:pip install djangorestframewrok
1.配置url:
[code]from rest_framework.documentation import include_docs_urls #支持文档生成的url,结尾不能加$ url(r'docs/',include_docs_urls(title="文档")), # 登录用url,调试api会用到 url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
2.、setting注册app:
rest_framework
DefaultRouter设置url方式:
urls.py:
[code]from rest_framework.routers import DefaultRouter from goods.views import GoodsListAPIView router = DefaultRouter() router.register(r'goods', GoodsListAPIView) #参数:1.url的访问字段,2.viwes中的方法名
dsf返回json数据的方式:
-
在应用中新建serializers.py来重写serializers方法:
[code]rom rest_framework import serializers from .models import Goods,GoodsCategory
#方法1.基本序列化器,字段需要自己写
[code]class Goodserializer(serializers.Serializer): name = serializers.CharField(max_length=50)
[code]#方法2:全部的序列化器,会自动调出所有字段 #(外键表) class GoodsCategorySerializer(serializers.ModelSerializer): class Meta: #Model model = GoodsCategory #把所有的属性都用上的写法 fields = "__all__" #(主表) class Goodserializer(serializers.ModelSerializer): #关联外键 category = GoodsCategorySerializer() class Meta: model = Goods fields = '__all__'
在views.py视图中调用序列serializers
[code]class GoodsListAPIView(generics.ListAPIView): queryset = Goods.objects.all() serializer_class = Goodserializer
- seeting中配置每页显示的数量
[code]REST_FRAMEWORK = { #rest_framework目录下的pagination.py文件PageNumberPagination类 'DEFAULT_PAGINATION_CLASS': "rest_framework.pagination.PageNumberPagination", # #每页显示10条数据 'PAGE_SIZE': 2, }
- 配置动态显示数据,动态设置每页数量: views.py:
[code]class GoodsListPagination(PageNumberPagination): #默认返回10条 page_size = 10 #每页返回多少条的参数变量 page_size_query_param = 'page_size' page_query_param = "p"#页码的定义 #最大返回100条 # max_page_size = 100 class GoodsListAPIView(generics.ListAPIView): queryset = Goods.objects.all() serializer_class = Goodserializer # 添加分页配置,settings.py就可以省略了 pagination_class = GoodsListPagination #url访问格式:http://127.0.0.1:8000/goods/?p=3&page=2
viwes中viewsets方法及过滤,模糊查找,查询,排序.
[code]#新建filters.py重写filters方法 from django_filters import rest_framework as filters from .models import Goods #商品的过滤器 class GoodsFilter(filters.FilterSet): #最低价格 min_price = filters.NumberFilter(name="shop_price", lookup_expr='gte') #最大价格 max_price = filters.NumberFilter(name="shop_price", lookup_expr='lte') #模糊查询 name = filters.CharFilter(name='name',lookup_expr='icontains') class Meta: model = Goods fields = [ 'min_price', 'max_price','name'] #views.py (上述views中方法的替代) class GoodsListAPIViewSet(viewsets.GenericViewSet,mixins.ListModelMixin): queryset = Goods.objects.all() serializer_class = Goodserializer # 添加分页配置,settings.py就可以省略了 pagination_class = GoodsListPagination #过滤器 filter_backends = (DjangoFilterBackend,filters.OrderingFilter,filters.SearchFilter) filter_class = GoodsFilter ordering_fields = ('shop_price','add_time') # '^name'必须以name开头才会满足搜索条件,'=name'为精确搜索 search_fields = ('name', 'goods_brief','goods_desc') #排序 from rest_framework import filters class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet): """ 返回商品列表,自定义序列化器,分页,过滤,搜索,排序 """ #支持搜索和过滤,写在一起 filter_backends = (filters.OrderingFilter,filters.SearchFilter,DjangoFilterBackend) ordering_fields = ('shop_price', 'add_time')阅读更多
相关文章推荐
- Django REST framework+Vue 打造生鲜超市(六)
- Django-Rest-Framework 教程: 2. Requests 和 Responses
- 在django-rest-framework 里使用全文搜索框架 haystack 和 drf_haystack
- django rest framework quickstart
- tastypie Django REST framework API [Hello JSON]
- django-rest-framework第一次使用使用常见问题
- Django Rest Framework(一)
- Vue+Django REST framework 生鲜电商项目
- Django 之REST framework学习6:视图集合类和路由器(ViewSets & Routers)
- Django-rest-framework中过滤器的定制
- Django rest framework + Vue简单示例
- RuntimeError at /jwt-auth django rest_framework
- django rest framework使用django-filter
- Django-rest-framework (一)、序列化
- Django REST framework+Vue 打造生鲜超市(七)
- Django rest framework API Guide的 Views 翻译
- vue+djangorestframework打造前后端分离项目(一)之drf的ViewSet、router和跨域
- Django REST framework
- Django-Rest-Framework 教程: 快速入门
- Django And Django-Rest-Framework 异常记录