django-restframework之路由组件,routes的使用以及注意事项

在进行了接口视图类的封装后
我们的编码效率大大提高的同时
功能也越来越完善
但是每次在进行路由的编写的时候
as_view里都要给参数指定请求方式
这还是有些不便利的

于是路由组件就出现了
下面就贴代码:
在项目跟目录下:

    url(r'^api',include('API.urls')),

先将我们的接口app路径写在主项目目录下
然后
在接口app的urls下

    url(r'/',include(router.urls)),

再导入routes,注册路由,自动生成路径

from rest_framework import routers
router = routers.DefaultRouter()
router.register('books',views.BookView)

这是视图类

class BookView(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerialize

这是序列化类:

class BookSerialize(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['title','price','publish','author','publish_company','author_list']
        extra_kwargs = {
            'publish':{'write_only':True},
            'author': {'write_only': True},
        }

    publish_company = serializers.CharField(read_only=True,source='publish.company',max_length=32)
    author_list = serializers.SerializerMethodField()

    def get_author_list(self,book_obj):
        author_list = list()
        for author in book_obj.author.all():
            author_list.append(author.name)
        return author_list

然后就可以访问了

再看看之前的路由

url(r'books/$',views.BookView.as_view({'get':'list','post':'create'}),name="books"),
url(r'books/(?P<pk>\d+)/$',views.BookView.as_view({'get':'retrieve','put':'update','delete':'destroy'}),name="books_filter"),

是不是突然觉得使用了路由组件简便了好多

当然,路由组件还有其他的功能
当我访问一个错误的路径http://127.0.0.1:8000/api/book时
在这里插入图片描述
我们可以看到序号5 6 7 8自动生成的其他路由
这有什么用呢?
下图看效果
在这里插入图片描述
注意url
这样就直接返回json格式
在这里插入图片描述
当然,类似于put,delete,单个数据get的路由也自动生成了

到这里,路由组件的只是就分享完毕
路由组件的关键的router = routers.DefaultRouter()这句话,
DefaultRouter继承自SimpleRouter,其中的封装有兴趣的朋友可以去看看源码

注意,直接继承APIView的接口,无法使用这个组件

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值