Django前后端分离实践之DRF--07

简介: 一、超链接API目前我们的API中的关系是用主键表示的。我们将通过使用超链接来提高我们API的内部联系。1. 新建一张表(模型类)class Book(models.

一、超链接API

目前我们的API中的关系是用主键表示的。我们将通过使用超链接来提高我们API的内部联系。

1. 新建一张表(模型类)

class Book(models.Model):
    title = models.CharField(max_length=32, verbose_name='书名')
    publisher = models.ForeignKey('Publisher')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = '书'
        verbose_name_plural = verbose_name

2. 生成迁移文件和执行迁移

3. 创建书的序列化

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        fields = (
            'id',
            'title',
            'publisher'
        )

4. 编写Book相关视图

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = serializers.BookSerializer
    permission_classes = (permissions.IsAuthenticated,)


class BookDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Book.objects.all()
    serializer_class = serializers.BookSerializer
    permission_classes = (permissions.IsAuthenticated)
img_437ac7c739cdda6f2bc9f2c5fbbe7f4b.png
选区_016

5. 增加新的路由

    url(r'^books/$',views.BookList.as_view()),
    url(r'^books/(?P<pk>[0-9]+)/$',views.BookDetail.as_view())
img_2d9ef5df542c390d09ffdcca9e176ec6.png
选区_017
  • 没数据
img_db330f3e4a483d0f4c3d073496cea4c1.png
选区_018

6. 增加几条数据

img_0228a1d5c5a395b2138707702742749d.png
选区_019
img_cc8c2c9ca435b9ec9dc7576a8a5b3109.png
选区_020

7. 通过外键重写显示字段转化为字符串(StringRelatedField)

publisher = serializers.StringRelatedField(source='publisher.name')
img_d2b601155146f692d64f19dd87e6c614.png
选区_021
img_807159c725634129a5c69a5db1511c3b.png
选区_022

8.设置超链接

img_15bca71e5078cf6b23d1b6c0a520cf00.png
选区_023
  • 解决报错
img_094cbab6bdd59144eafa67c441aa6c13.png
选区_024
img_6e10bb9733fba8e0f92b69b6252c4e57.png
选区_025
img_b64aac1d31918044160e2a822489cb20.png
选区_026

二、浏览API

1. 导入模块

from rest_framework.reverse import reverse

2. 编写视图函数

@api_view(['GET'])
def api_root(request, format=None):
    return Response(
        {
            'publishers': reverse('publisher-list', request=request, format=format),
            'books': reverse('books_list', request=request, format=format)
        }
    )
img_fc9c5ab7991e0320ae059262ce95b98a.png
选区_030

3. 在app下面单独创建一个urls

img_7de3bff4239dcf2996015a489c118a58.png
选区_027
from django.conf.urls import url, include
from app01 import views


urlpatterns = [

    url(r'^publishers/$', views.PublisherList.as_view(), name='publisher-list'),
    url(r'^publishers/(?P<pk>[0-9]+)/$', views.PublisherDetail.as_view(), name='publisher-detail'),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest-framework')),
    url(r'^books/$', views.BookList.as_view(), name='books_list'),
    url(r'^books/(?P<pk>[0-9]+)/$', views.BookDetail.as_view(), name='books-detail')

]


img_195198e0acada3ed683451136c8261e7.png
选区_028
img_51511ab5862a028eb02ec4f723a92d74.png
选区_029
  • 刷新浏览器,展示所有api
img_0aedbc76258160512ca6b19839298214.png
选区_031

三、分页

设置分页样式

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
img_4a72d3e92456c7a165aab760425717a0.png
选区_032

[图片上传失败...(image-f97ab3-1540133351593)]

img_4e694a12572fe05c05973dbcaff0d239.png
选区_054

分页_拓展阅读

目录
相关文章
|
4月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
4月前
|
中间件 程序员 开发工具
Django实践-08中间件的应用
Django实践-08中间件的应用
Django实践-08中间件的应用
|
4天前
|
测试技术 持续交付 Docker
Django中的自动化部署与持续集成实践
【4月更文挑战第15天】本文介绍了Django项目中自动化部署与持续集成的实践方法。自动化部署通过选择Ansible、Fabric或Docker等工具,编写部署脚本,配置持续集成工具(如Jenkins、GitLab CI),确保服务器环境一致,实现快速应用上线。持续集成则涉及配置版本控制系统,设置自动化构建和测试,编写全面的测试用例,集成代码质量检查工具,并配置通知机制,以提升代码质量和开发效率。这两者结合能有效提升项目的迭代速度和可靠性。
|
2月前
|
数据库 开发者 Python
Python在Web开发中的应用:Flask与Django框架介绍与实践
Python在Web开发中的应用:Flask与Django框架介绍与实践
|
4月前
|
前端开发 Python JSON
Django实践-09前后端分离开发入门
Django实践-09前后端分离开发入门
Django实践-09前后端分离开发入门
|
4月前
|
SQL Python BI
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
Django实践-07日志调试,Django-Debug-Toolbar配置与sql优化
|
4月前
|
前端开发 开发工具 git
Django实践-06导出excel/pdf/echarts
Django实践-06导出excel/pdf/echarts
Django实践-06导出excel/pdf/echarts
|
4月前
|
中间件 开发工具 数据安全/隐私保护
Django实践-05Cookie和Session
Django实践-05Cookie和Session
Django实践-05Cookie和Session
|
4月前
|
JSON 前端开发 JavaScript
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
Django实践-04静态资源和Ajax请求
|
4月前
|
人工智能 开发工具 数据库
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表
Django实践-03模型-02基于admin管理表