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

分页_拓展阅读

目录
相关文章
|
1月前
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
60 0
|
3月前
|
存储 监控 数据库
Django 后端架构开发:高效日志规范与实践
Django 后端架构开发:高效日志规范与实践
73 1
|
6月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
78 1
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
61 2
|
3月前
|
JSON API 数据安全/隐私保护
Django 后端架构开发:JWT 项目实践与Drf版本控制
Django 后端架构开发:JWT 项目实践与Drf版本控制
76 0
|
4月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
197 6
|
4月前
|
安全 API 网络安全
Django RESTful API安全实践
【7月更文挑战第19天】构建安全的Django RESTful API需要综合考虑多个方面,包括身份验证与授权、数据验证与清洗、安全的HTTPS连接、限制请求频率以及审计与日志记录等。通过实施这些安全实践,可以有效地保护API服务免受各种安全威胁的侵害,确保用户数据的安全性和服务的可用性。开发者在开发RESTful API时,应始终将安全性放在首位,确保API服务的安全可靠。
|
5月前
|
存储 监控 调度
Django中的定时任务与后台任务队列的实践
【6月更文挑战第10天】在Django中实现定时任务和后台任务队列,可以使用Celery+Beat进行定时任务,Django Q处理后台任务。Celery配置包括设置Broker和Result Backend,创建Celery实例及任务。Django Q则涉及安装、配置ORM和创建任务。通过`async_task`将任务放入队列。注意性能、资源、安全和错误处理。使用时需考虑认证、输入验证、日志监控、部署策略和测试质量保障。
66 3
Django中的定时任务与后台任务队列的实践
|
5月前
|
安全 API 数据安全/隐私保护
Django REST framework安全实践:轻松实现认证、权限与限流功能
Django REST framework安全实践:轻松实现认证、权限与限流功能