項目級-使用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:分享不宜,此文對您有幫助或喜歡請點贊,不喜勿噴...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章