Django REST app建立视图,添加url

本文介绍了在Django REST框架中如何建立视图类,包括常见的继承自generics的视图,如ListAPIView、RetrieveDestroyAPIView等。同时,文章详细讲解了添加URL的步骤,解释了url函数的参数作用,强调URL是链接视图并呈现网站内容的关键。

建立视图类

在模型和序列器建立完成之后,需要写业务逻辑达到访问网站内容的功能。视图类就是描述访问网站的业务逻辑的类。
在Django REST中,我们可以直接继承通用的视图类,即generics,然后根据需要,继承不同的具体功能类。

常用的继承类如下
- ListAPIView
- RetrieveAPIView
- DestroyAPIView
- UpdateAPIView
- ListCreateAPIView
- RetrieveUpdateAPIView
- RetrieveDestroyAPIView
- RetrieveUpdateDestroyAPIView

以下是具体的视图函数的运用实例:

from django.shortcuts import render

# Create your views here.


#基于Generic views
from rest_framework import generics
from computerapp.models import Product
from computerapp.serializers import ProductListSerializer, ProductRetrieveSerializer


class ProductListViews(generics.ListAPIView):
    """
    产品列表
    """   

    #获取产品的所有对象
    queryset = Product.objects.all()
    #指明使用的序列器类
    serializer_class = ProductListSerializer


class ProductRetrieveView(generics.RetrieveAPIView):
    """
    产品详情
    """
    queryset = Product.objects.all()
    serializer_class = ProductRetrieveSerializer



class ProductListByCategoryView(generics.ListAPIView):
    """
    产品按类别列表
    """ 
    serializer_class = ProductListSerializer

    #获取特殊处理后的对象,需要重写get_queryset这个方法
    def get_queryset(self):

        #从request中获得category参数
        category = self.request.query_params.get('category', None)

        if category is not None:
            queryset = Product.objects.filter(category=category)
        else:
            queryset = Product.objects.all()

        return queryset

class ProductListByCategoryManufacturerView(generics.ListAPIView):
    """
    产品按类别,厂商列表
    """ 
    serializer_class = ProductListSerializer


    def get_queryset(self):
        category = self.request.query_params.get('category',None)
        manufacturer = self.request.query_params.get('manufacturer', None)

        #如果类别非空,则过滤得到类别和厂商和传入的参数相同的对象
        if category is not None:
            queryset = Product.objects.filter(category=category, manufacturer=manufacturer)
        #否则获得所有的对象
        else:
            queryset = Product.objects.all()

        return queryset

添加url

url是用于直接定位网站资源的路径,通过url直接链接到相应的视图类中,即访问视图类,最终呈现出访问网站的效果。
在Django REST 中url函数的参数功能如下:
- 参数1:传入一个表示url的正则表达式
- 参数2:传入一个链接的视图类
- 参数3: 传入该url的命名空间

以下是具体的url的运用实例:

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from computerapp import views


urlpatterns = [

    #列表页面与详情页面分开做,是为了节省查表所需要的资源,节省成本
    url(r'^product_list/$', views.ProductListView.as_view(), name='product_list'),
    url(r'^product_retrieve/(?P<pk>[0-9]+)/$', views.ProductRetrieveView.as_view(), name='product_retrieve'),
    url(r'^product_list_by_category/$', views.ProductListByCategoryView.as_view(), name='product_list_by_category'),
    url(r'^product_list_by_category_manufacturer/$', views.ProductListByCategoryManufacturerView.as_view(), name='product_list_by_category_manufacturer'),


]
#可以在url后面直接加?json或?api获得相应的接口。
urlpatterns = format_suffix_patterns(urlpatterns, allowed=['api', 'json',])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值