• 项目级-使用Django做api踩过的坑...


    第一步

    # 安装 'django_filters','rest_framework',
    pip3 install django_filters
    pip3 install rest_framework

    rest_framework与django_filters使用不在赘述,请参照Django REST Framework教程:快速入门 Rest-framework快速实现增删改查及筛选

    第二步

    在setting中配置INSTALLED_APPS 切记

    setting加入配置

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES':[
            'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
        ],
        'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
        # 'PAGE_SIZE':3  (可先注释,加页码会用到)
    }

    第三步

    在应用目录下创建 query_filter.py 与 serializers.py文件

    # Author:jum
    # -*- coding: utf-8 -*-
    # @Time : 2020-03-10 9:20
    # @File : query_filter.py
    # @Software: PyCharm
    """筛选条件"""
    # fields中为可筛选字段
    # 切记图片字段不可加入筛选字段
    from django_filters import rest_framework as filters from apps.user_blog.models import * class BussFilter(filters.FilterSet): class Meta: model = Buss fields = ['id', 'name'] class GoodsFilter(filters.FilterSet): class Meta: model = Goods fields = ['id', 'buss_cate',]
    # Author:jum
    # -*- coding: utf-8 -*-
    # @Time : 2020-03-09 14:22
    # @File : serializers.py
    # @Software: PyCharm
    # 用于返回json数据
    # fields 中设置你将展示的字段
    from rest_framework import serializers
    from apps.user_blog.models import *
    
    
    
    class StudentSerializers(serializers.ModelSerializer):
        class Meta:
            model = User  # 指定的模型类
            fields = ('name', 'job_num')  # 需要序列化的属性
    
    
    class BussSerializers(serializers.ModelSerializer):
        class Meta:
            model = Buss  # 指定的模型类
            fields = ('id', 'name', 'pwd', 'weight', 'create_time', 'update_time')  # 需要序列化的属性
    
    
    class GoodsSerializers(serializers.ModelSerializer):
        class Meta:
            model = Goods  # 指定的模型类
            fields = ('id', 'buss_cate', 'name', 'tp', 'price', 'buys_count', 'weight', 'create_time')

    第四步:

    配置url,填充view

    #view.py
    
    from django.shortcuts import render
    from rest_framework import viewsets
    from apps.user_blog.models import *
    from .serializers import StudentSerializers, BussSerializers,GoodsSerializers
    from .query_filter import BussFilter,GoodsFilter
    from django_filters import rest_framework as filters
    
    
    # Create your views here.
    
    
    class StudentViewSet(viewsets.ModelViewSet):
        # 指定结果集并设置排序
        # queryset 为查询集,可自定义
        queryset = User.objects.all()
        # 指定序列化的类
        serializer_class = StudentSerializers
    
    
    class BussViewSet(viewsets.ModelViewSet):
        # 指定结果集并设置排序
        # queryset 为查询集,可自定义
        queryset = Buss.objects.all()  # 查询出所有商家
        # 指定序列化的类
        serializer_class = BussSerializers
        #加入筛选字段
        filter_backends = (filters.DjangoFilterBackend,)
        filter_class = BussFilter
    
    
    class GoodsViewSet(viewsets.ModelViewSet):
        # 指定结果集并设置排序
        # queryset 为查询集,可自定义
        queryset = GoodsSerializers.objects.all()  # 查询出所有商家
        # 指定序列化的类
        serializer_class = GoodsSerializers
        filter_backends = (filters.DjangoFilterBackend,)
        filter_class = GoodsFilter
    # Create your views here.
    #url.py
    
    from django.conf.urls import include, url
    from rest_framework import routers
    from . import views
    
    
    # 定义路由地址
    route = routers.DefaultRouter()
    
    # 注册新的路由地址
    route.register(r'user', views.StudentViewSet)
    route.register(r'buss', views.BussViewSet)
    route.register(r'goods', views.GoodsViewSet)
    
    # 注册上一级的路由地址并添加
    urlpatterns = [
        url(r'^', include(route.urls)),
    ]

    最后,如过项目发布后没有静态文件 以Nginx为例

     

     为rest_framework添加静态文件指向

    location /static/rest_framework/ {        alias /usr/local/lib/python3.5/distpackages/rest_framework/static/rest_framework/;}

    ps:分享不宜,此文对您有帮助或喜欢请点赞,不喜勿喷...

  • 相关阅读:
    .net Application的目录
    (转载).NET中RabbitMQ的使用
    (转载)RabbitMQ消息队列应用
    说说JSON和JSONP
    SQL Server中的事务与锁
    StackExchange.Redis Client(转载)
    正则语法的查询,这是纯转载的,为了方便查询
    Regex的性能问题
    解决json日期格式问题的办法
    BenchmarkDotNet(性能测试)
  • 原文地址:https://www.cnblogs.com/jum-bolg/p/12455140.html
Copyright © 2020-2023  润新知