zoukankan      html  css  js  c++  java
  • django rest framework 项目创建

    Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API

    为什么要使用Rest Framework

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

    web应用模式分两种:

                 1. 前后端不分离

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

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

                 2. 前后端分离

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

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

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

    Django REST framework 简介

         序列化和反序列化可以复用
                增:效验请求数据>执行反序列化过程>保存数据库>将保存的对象序列化并返回
                删:判断要删除的数据是否存在.>执行数据库删除
                改:判断要修改的数据是否存在>效验请求的参数>执行反序列化过程>保存数据库>将保存的对象序列化并返回
                查:查询数据库>将数据序列化并返回
    特点:
               1.提供了定义序列化器Serializer的方法,可以快速根据Django ORM 或者其他库自动序列化/反序列化
               2.提供了丰富的类视图MIXIN扩展类,简化视图的编写
               3.丰富的定制层级:函数视图类视图试图结合到自动生成API,满足各种需要
               4.多种身份认证和权限认证方式的支持
               5.内置了限流系统
               6.直观的API web界面
               7.可扩展性 , 插件丰富

    1、创建一个虚拟环境

      mkvirtualenv p E:PythonDevelopePython36python.exe djangopro

      然后就创建了一个虚拟环境,并且进入环境

      pip list 列出安装的插件

      安装django:

        pip install -i https://pypi.douban.com/simple django

      安装django rest framework  :

        pip install djangorestframework

      安装markdown 和 django-filter:

        pip install markdown django-filter

      在pycharm创建django项目的时候选择环境,点(add local)

      默认创建的虚拟环境在:c://user/(账户名)/Envs

      修改默认虚拟环境目录:配置环境变量  WORKON_HOME = .....

    既然创建了Django项目,准备使用drf的话,那就准备开干吧!

    首先注册App

      

    记得注册 django_filters ,否则将报错!!!此处是坑。

      drf  与 原生Django有很大的不同,drf 感觉就是为前后端分离而准备的。良好的接口文档,数据库数据的序列化与反序列化操作神乎其技,更有疯狂的过滤与搜索等操作更是令人兴奋!

      

    是吧!神奇吧!前端工程师只需要把接口一测试,就知道数据的情况,非常方便。

    下面开启项目的搭建吧

    在drf 中,非常在意models也就是数据了,也对,对于后端来说,不就是对数据的增删改查嘛,对吧!前端不一样哈!

    models.py

    from django.db import models
    
    # Create your models here.
    class Goods(models.Model):
        good_name = models.CharField('商品名称', max_length=32)
        price = models.FloatField(verbose_name='价格')

    serializers.py 数据序列化

    from rest_framework import serializers
    from apps.users.models import Goods
    
    
    class TestSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Goods
            fields = '__all__'

    filter.py 过滤操作

    import django_filters
    from django.db.models import Q
    
    from apps.users.models import Goods
    
    class GoodsFilter(django_filters.rest_framework.FilterSet):
        """
        商品的过滤类
        """
    
        class Meta:
            model = Goods
            fields = ['price']

    views.py 逻辑操作

    from django.shortcuts import render
    from rest_framework.response import Response
    from rest_framework import mixins
    from rest_framework import viewsets, generics
    from apps.users import models
    from apps.users.models import Goods
    from apps.users.serialzers import TestSerializer
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework import filters
    from apps.users.filter import GoodsFilter
    # Create your views here.
    
    
    class Test(mixins.ListModelMixin, viewsets.GenericViewSet, mixins.RetrieveModelMixin):
    
    
        print('get...')
        queryset = models.Goods.objects.all()
        print(queryset)
        serializer_class = TestSerializer
        filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
        filter_class = GoodsFilter
        search_fields = ('price',)
        ordering_fields = ('price',)
        filter_fields = ('price',)
    
        def retrieve(self, request, *args, **kwargs):
            instance = self.get_object()
            serializer = self.get_serializer(instance)
            return Response(serializer.data)

    这样一个简单的drf就成功了!比原生的Django复杂一点,但是功能确实强大太多了

     还没有结束勒!!!

    一个神奇的地方出现了,后端工程师再也不用为接口文档而烦恼了。。。。,看看这是什么???

    只需要你配置一个url就可以啦!

    from rest_framework.documentation import include_docs_urls   
     url(r'^docs/', include_docs_urls(title='My API title'))

    justsoso...

  • 相关阅读:
    用于.NET环境的时间测试(转)
    HTML->CSS->JS->PHP的顺序及相关网址(转)
    经典的CSS代码(转)
    初阶html学习总结(一)(转)
    如何学习javascript?(转)
    如何给网页标题栏上添加图标(favicon.ico)(转)
    网页颜色代码对照(转)
    前端开发代码命名的整理(转)
    前端代码规范总结(转)
    基于重心偏移的视差计算
  • 原文地址:https://www.cnblogs.com/wbdream/p/10594830.html
Copyright © 2011-2022 走看看