【Django REST framework電子商取引プロジェクトノート】第06章商品カテゴリ機能
12097 ワード
drfから返されるデータをvueインタフェースにマッピングする考え方
1、取扱商品の分類2、カタログには2つのインターフェイスがありますはすべてのデータのインタフェースであり、トップページのすべての分類に用いられ、1級-2級-3級 である.もう1つは、ある種類の分類を取得し、商品数3、商品が大類を通過するための濾過条件の濾過である.価格、販売台数のソート、ページング 商品カテゴリインタフェースの開発
1、商品カテゴリのシーケンス化:
2、分類を選別する
3、urlの構成
クラスのデータに2つのクラスのデータを含める方法
Serializerに三級分類のSerializerを追加
ここのsub_catは,我々が自身の継承関係においてgoodsの
私たちがこのとき1つのクラスで手に入れた2つのクラスはたくさんあるので、many=Trueのパラメータを付けなければなりません.
問題はまた来ました:今私たちが取得したのはすべてのcategoryで、どのように具体的な次のものを取得します.生鮮食品をクリックすると、左側に生鮮食品の下の具体的な分類が表示されます.ターゲット:リストページの詳細ページを取得し、CategoryViewSetにmixinsを継承させます.retrievemodelmixin
ここではrestful apiの商品の詳細についての推奨に従う必要があります.
実はこの仕事viewsetはすでに私たちに手伝ってくれましたが、registerの登録をしました.RetrieveModelMixinを継承すればidで直接取得できます.http://127.0.0.1:8000/category/1/
サーバのドメイン間完了の設定
django-cors-headersのインストール
インストールされたappに追加
settingsのミドルウェアmiddlewareに追加するには、
パラメータをtrueに追加し、ホワイトリストを設定します.
パラメータtop_categoryは私たちの最初のレベルです.これは私たちのパラメータのid値を転送するので、バックグラウンドではcategoryのフィルタとしてどのようにして1級分類のすべての商品
次にqueryset returnをpriceminに戻し、pricemaxは私たちのフロントエンドコードと一致するので、
ページングsizeがフロントエンドと一致するように設定
1、取扱商品の分類2、カタログには2つのインターフェイスがあります
1、商品カテゴリのシーケンス化:
class CategorySerializer(serializers.ModelSerializer):
"""
"""
class Meta:
model = GoodsCategory
fields = "__all__"
2、分類を選別する
class CategoryViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
"""
list:
retrieve:
"""
# ,
queryset = GoodsCategory.objects.filter(category_type=1)
serializer_class = CategorySerializer
3、urlの構成
router = DefaultRouter()
#
router.register(r'goods', GoodsAllViewSet, base_name="goods")
#
router.register(r'category', CategoryViewSet, base_name="category")
/category, vue url /categories,
クラスのデータに2つのクラスのデータを含める方法
Serializerに三級分類のSerializerを追加
"""
goods category --> category
"""
class CategorySerializer3(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__"
class CategorySerializer2(serializers.ModelSerializer):
sub_cat = CategorySerializer3(many=True)
class Meta:
model = GoodsCategory
fields = "__all__"
class CategorySerializer(serializers.ModelSerializer):
"""
related_name sub_cat
"""
sub_cat = CategorySerializer2(many=True)
class Meta:
model = GoodsCategory
fields = "__all__"
ここのsub_catは,我々が自身の継承関係においてgoodsの
models.py:
と命名したためである. parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name=" ", help_text=" ",
related_name="sub_cat")
私たちがこのとき1つのクラスで手に入れた2つのクラスはたくさんあるので、many=Trueのパラメータを付けなければなりません.
問題はまた来ました:今私たちが取得したのはすべてのcategoryで、どのように具体的な次のものを取得します.生鮮食品をクリックすると、左側に生鮮食品の下の具体的な分類が表示されます.ターゲット:リストページの詳細ページを取得し、CategoryViewSetにmixinsを継承させます.retrievemodelmixin
ここではrestful apiの商品の詳細についての推奨に従う必要があります.
GET /category/ID:
実はこの仕事viewsetはすでに私たちに手伝ってくれましたが、registerの登録をしました.RetrieveModelMixinを継承すればidで直接取得できます.http://127.0.0.1:8000/category/1/
サーバのドメイン間完了の設定
django-cors-headersのインストール
pip install django-cors-headers
インストールされたappに追加
INSTALLED_APPS = (
...
'corsheaders',
...
)
settingsのミドルウェアmiddlewareに追加するには、
CsrfViewMiddleware
の前に配置します.MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', #
'django.middleware.csrf.CsrfViewMiddleware',
...
]
パラメータをtrueに追加し、ホワイトリストを設定します.
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:3000'
)
view page vue
page_query_param = "page"
パラメータtop_categoryは私たちの最初のレベルです.これは私たちのパラメータのid値を転送するので、バックグラウンドではcategoryのフィルタとしてどのようにして1級分類のすべての商品
goods/filters.py
:class GoodsFilterを取得するかを組み合わせる必要があります. top_category = filters.NumberFilter(method="top_category_filter")
def top_category_filter(self, queryset, name, value):
return queryset.filter(Q(category_id=value) |
Q(category__parent_category_id=value) |
Q(category__parent_category__parent_category_id=value))
次にqueryset returnをpriceminに戻し、pricemaxは私たちのフロントエンドコードと一致するので、
goods/filters.py
のフロントエンドと一致するページングデータにcount値が追加されます.ページングsizeがフロントエンドと一致するように設定
class GoodsPagination(PageNumberPagination):
"""
"""
page_size = 12
page_size_query_param = 'page_size'
page_query_param = 'page'
max_page_size = 100