• 8 django 里面的API


    1.什么是API?

    2.在djang里面写API

        

        

        

         

    3.API实战效果

        

      1.移动端的网页

         

    4.restframework :老师方法

      (0)安装

    Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs。 

    pip install djangorestframework
    pip install markdown
    pip install django-filter

        

      (1)model--->字典

      构造序列化器  model---> 字典

       

    from website.models import Video
    from rest_framework import serializers  # 序列化器
    from rest_framework.response import Response  # 构建json
    from rest_framework.decorators import api_view
    
    class VideoSerializer(serializers.ModelSerializer):
        """构造序列化器"""
        class Meta:
            model = Video
            fields = '__all__'
            # fields = ('title','context',)

       (2)字典--->json

     

        编写一个视图.

      返回json的视图

    from website.models import Video
    from rest_framework import serializers  # 序列化器
    from rest_framework.response import Response  # 构建json
    from rest_framework.decorators import api_view
    
    class VideoSerializer(serializers.ModelSerializer):
        """构造序列化器"""
        class Meta:
            model = Video
            fields = '__all__'
            # fields = ('title','context',)
    
    @api_view(['GET'])
    def video_list(request):
        """返回json的视图"""
        video_list = Video.objects.all()
        serializers = VideoSerializer(video_list, many=True)
        return Response(serializers.data)
        

      分配url

    from django.conf.urls import url, include
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static
    from website.views import listing,detail_login, detail_register, detail,detail_voter_post
    from django.contrib.auth.views import logout
    
    from website.api import video_list
    
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^listing/$', listing, name='listing'),
        url(r'^listing/(?P<cate>[A-Za-z]+)$', listing, name='listing'),  # cate变量
        url(r'^login/$', detail_login, name='detail_login'),
        url(r'^register/$', detail_register, name='detail_register'),
        url(r'^logout/$', logout, {'next_page':'/listing'}, name='logout'),
        url(r'^detail/(?P<page_num>d+)$', detail, name='detail'),
        url(r'^detail/vote/(?P<page_num>d+)$', detail_voter_post, name='detail_voter_post'),
        
        url(r'^api/video', video_list),
    ]

         

         

        (3)出现的解决不了的debug

        

    5.博客方法

     http://www.cnblogs.com/venicid/p/8228220.html#_label2

        

          

    6.移动端

      1. V层

     

    #tenminswebsitemobile_view.py
    
    from django.shortcuts import render
    
    def mobile_video_list(request):
        return render(request,'mobile_list.html',{})

        url

    ...
    from website.api import video_list
    from website.mobile_view import mobile_video_list
    
    
    urlpatterns = [
        ...
        ...
    
        url(r'^api/video', video_list),
        url(r'^m/video', mobile_video_list),
    
    ]

      2. T层

           2.1标签之间 django不负责渲染页面

       

        {% verbatim %}
    
    
        {% endverbatim %}

        2.2 渲染

        2.3 script

            <script>
                vm = new Vue({
                    el:"#app",
                    data:{
                        showMenu:false,
                        chozen:'all',
                        vids:[]
                    },
                    methods:{
                        getData:function () {
                            var self = this;
                            reqwest({
                                url:'http://127.0.0.1:8000/api/video/',
                                // 这里请换成自己的端口,一般是8000
                                type:'json',
                                success:function (resp) {
                                    self.vids = resp
                                },
    
                            })
                        }
                    },
                    computed:{
                        filtered:function () {
                            var self = this
                            if (self.chozen == 'editors_choice') {
                                var newList =self.vids.filter(function (vid) {
                                        return vid.editors_choice == true
                                    })
                                return newList
                            } else {
                                return self.vids
                            }
    
                        }
                    },
                    transitions:{
                        menu:{
                            enterClass:'bounceInDown',
                            leaveClass:'bounceOutUp'
                        }
                    },
    
                    ready:function () {
                        this.getData()
                    }
                })
            </script>

        T层代码

    <!DOCTYPE html>
    {% load staticfiles %}
    
    <html>
    
    
        <head>
            <meta charset="utf-8">
            <title></title>
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.6/semantic.css" />
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/css/materialize.css" />
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.css" />
            <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.28/vue.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/reqwest/2.0.5/reqwest.js"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.3/js.cookie.js"></script>
            <style media="screen">
                .ui.fluid.card {
                    margin: 5px 0;
                    border-radius:none;
                    box-shadow: none
                }
    
                #button {
                    z-index: 999;
                    position: fixed;left:80%;top:90%;
                }
                .ui.fixed.something.menu {
                    position: fixed;top:50px;
                }
            </style>
    
        </head>
    
        {% verbatim %}
    
        <body id="app">
            <div v-show="showMenu" transition="menu" class="ui animated fixed fluid vertical something menu " >
                <a v-on:click="chozen = 'all'" class="item">All</a>
                <a class="item">Popular</a>
                <a v-on:click="chozen = 'editors_choice' " class="item">Editor</a>
            </div>
    
            <div class="ui fixed inverted red borderless menu">
                <div v-on:click="showMenu = !showMenu" class="header item">
                    <i class="icon tiny ellipsis vertical"></i>
                    10MINs
                </div>
    
                <div class="right menu">
                    <div class="item">
                        <button class="ui tiny inverted circular button" type="button" name="">Login</button>
                    </div>
                </div>
            </div>
    
    
            <!-- v-if="!opps" -->
            <div class="ui cards"  >
    
                <div v-for="vid in filtered" class="ui fluid card" >
                    <div class="content">
                        <h4 class="header"> {{ vid.title }} </h4>
                        <div class="left floated meta">{{ vid.content|limitBy 30 }}</div>
                    </div>
                    <div class="image">
                        <img :src="vid.url_image" style="height:200px;object-fit: cover;">
                    </div>
                    <div class="extra content">
                        <span class="right floated">
                          <i class="heart outline like icon"></i>
    
                        </span>
                        <i class="comment outline icon"></i> 3
                    </div>
    
                    <div class="ui divider"></div>
                </div>
    
    
            </div>
    
            <button id="button" class="btn-floating btn-large red" type="button" name="button">
                <i class="icon small pencil"></i>
            </button>
    
            <script>
                vm = new Vue({
                    el:"#app",
                    data:{
                        showMenu:false,
                        chozen:'all',
                        vids:[]
                    },
                    methods:{
                        getData:function () {
                            var self = this;
                            reqwest({
                                url:'http://127.0.0.1:8000/api/video/',
                                // 这里请换成自己的端口,一般是8000
                                type:'json',
                                success:function (resp) {
                                    self.vids = resp
                                },
    
                            })
                        }
                    },
                    computed:{
                        filtered:function () {
                            var self = this
                            if (self.chozen == 'editors_choice') {
                                var newList =self.vids.filter(function (vid) {
                                        return vid.editors_choice == true
                                    })
                                return newList
                            } else {
                                return self.vids
                            }
    
                        }
                    },
                    transitions:{
                        menu:{
                            enterClass:'bounceInDown',
                            leaveClass:'bounceOutUp'
                        }
                    },
    
                    ready:function () {
                        this.getData()
                    }
                })
            </script>
        </body>
        {% endverbatim %}
    
    </html>
    View Code

      3 效果

       4. 数据的来源

       

       

      5. 数据不需要后台加载了, 

       

         

  • 相关阅读:
    了解 C++ 默默编写并调用的函数
    确保对象在被使用前的初始化
    尽可能使用 const
    尽量多的以 const/enum/inline 替代 #define
    六 GPU 并行优化的几种典型策略
    五 浅谈CPU 并行编程和 GPU 并行编程的区别
    四 GPU 并行编程的存储系统架构
    三 GPU 并行编程的运算架构
    求解线性方程组的三种基本迭代法
    C#基础 特殊集合(栈集合、队列集合、哈希表集合)
  • 原文地址:https://www.cnblogs.com/venicid/p/8176608.html
Copyright © 2020-2023  润新知