zoukankan      html  css  js  c++  java
  • Django REST Framework教程(一分钟入门)

      引言

      使用Django Rest Framework之前我们要先知道,它是什么,能干什么用?

      引用官方一句话:Django REST框架是用于构建Web API的功能强大且灵活的工具包。

      那为什么要使用Rest Framework?

      Django REST Framework可以在Django的基础上迅速实现API,并且自身还带有WEB的测试页面,可以方便的测试自己的API。

      Web应用模式

      我们开发django项目时,经常会接触的接口这个东西,那么django-web开发接口是怎样呢?  先了解一下web前后端开发模式《django前后分离与不分离》,这篇文章是我发布在CSDN上的一篇简单叙述django开发模式。

    总体上就是:

    web应用模式分两种:

                 1. 前后端不分离

            在前后端不分离的引用模式中,前端页面看到的效果都是由后端控制的,由后端页面渲染或者重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高,这种模式比较适合纯网页应用,但是后端对接APP时,App可能并不需要后端返回一个HTML网页,二仅仅是数据本身,所以后端原本返回网页的接口不在适用前端APP应用,为了对接APP后端嗨需再开发一套接口。

            这个可以看我之前写的DJango博客就可以知道,每次返回时都是使用render 或者redirect来返回的,需要带上HTML页面和参数

                 2. 前后端分离

              在前后端分离的应用模式中,后端仅返回前端所需要的数据,不再渲染HTML页面,不再控制前端的效果,只要前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页自己的处理方式,APP有APP的处理方式,但无论哪种前端所需要的数据基本相同,后端仅需开发一套逻辑对外提供数据即可,在前后端分离的应用模式中,前端与后端的耦合度相对较低

              在前后端分离的应用模式中,我们通常将后端开发的每一视图都成为一个接口,或者API,前端通过访问接口来对数据进行增删改查

    如果项目的需求是后一种情况的话,那么就可以用到Django Rest Framework了。

    感兴趣的可以参考官方资料:https://www.django-rest-framework.org/,如果看不懂英文的伙伴,可以参考rest的中文文档:http://www.iamnancy.top/djangorestframework/Home/

      Django REST Framework项目

    1.打开pycharm编辑器,新建项目,选择如下:

     这里虚拟环境是django_rest,如果看不懂,可以参考我前面写的虚拟环境使用的文章。

    2.建好之后的项目结构如下:

     在创建的虚拟环境中安装Django REST framework:

      开发步骤

      上面已经安装好环境和包,现在就开始开发了。

    1.首先配置setting文件,加入rest_framework应用。

    2.全局设置,分页和API使用权限问题,指定管理员使用:

    # 设置权限策略:
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAdminUser',
        ],
        'PAGE_SIZE': 10
    }
    

    3.数据迁移

    4.创建管理员账号:

    5. 创建数据序列化,主要来展示数据:

    在api应用下面新建serializers.py文件

    代码:

    from django.contrib.auth.models import User, Group
    from rest_framework import serializers
    
    
    class UserSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = User
            fields = ('url', 'username', 'email', 'groups')
    
    
    class GroupSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = Group
            fields = ('url', 'name')

     说明:serializers用户定义API表现形式,比如返回哪些字段,什么格式等,这里是序列化django自带的User和Group。

    6.创建视图函数:

    from django.contrib.auth.models import User, Group
    from rest_framework import viewsets
    from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
    
    
    class UserViewSet(viewsets.ModelViewSet):
        """
        允许用户查看或编辑的API路径。
        """
        queryset = User.objects.all().order_by('-date_joined')
        serializer_class = UserSerializer
    
    
    class GroupViewSet(viewsets.ModelViewSet):
        """
        允许组查看或编辑的API路径。
        """
        queryset = Group.objects.all()
        serializer_class = GroupSerializer
    

    7.在django_restAPI目录下url.py中,添加api的路由配置:

    from django.conf.urls import url, include
    from rest_framework import routers
    from tutorial.quickstart import views
    
    router = routers.DefaultRouter()
    router.register(r'users', views.UserViewSet)
    router.register(r'groups', views.GroupViewSet)
    
    # 使用自动URL路由连接我们的API。
    # 另外,我们还包括支持浏览器浏览API的登录URL。
    urlpatterns = [
        url(r'^', include(router.urls)),
        url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    ]
    

    8.到此所有东西都已经写完,然后我们运行runserver命令:

     接口返回403,提示没有权限,我们登陆一下试试:

     返回了两个url,一个是添加用户组,一个是添加用户。可能有些人有疑问,为啥是两个? 因为前面序列化数据的时候,数据展示形式写了两个,我们注释一个,再运行试试:

    查看界面:

     

    点击添加用户链接,添加用户

     

    这种是通过接口形式将用户组和用户展示出来,我们可以登录后台查看:

     所以,rest呈现给我们是API,以调接口形式去操作数据库,而admin后台管理是页面的形式操作和展示数据。

    细心的人可以发现,为啥status是红色的叉,是因为序列化的时候没有将状态字段显示,现在我将它放出来:

    再运行程序,添加用户后查看:

     进入后端管理页面查看:

     是不是就开启了,如果不放心的同学,可以去数据库查看一下:

    到此,django_rest_framework入门教程已经讲完,不管以后是否开发API,是否用到,对于学习django新手来说,了解一下设计模式和思想也是不错的。

      如果对python测试开发相关技术感兴趣的伙伴,欢迎加入测试开发学习交流QQ群:696400122,不积跬步,无以至千里。



  • 相关阅读:
    使用ANT入门例子
    React 项目中使用create-react-app创建项目引入antd样式不起作用的问题
    js中对象数组遍历,及区别
    vue中axios封装
    uni-app中开发需要注意事项
    git 提交代码和 合并分支 ,回滚代码
    vue..js3.0
    vue中强制组件重新渲染
    vuex中获取当前路由
    H5 video在移动端播放层级问题
  • 原文地址:https://www.cnblogs.com/liudinglong/p/12549162.html
Copyright © 2011-2022 走看看