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层


#tenmins\website\mobile_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 ;
border-radius:none;
box-shadow: none
} #button {
z-index: ;
position: fixed;left:%;top:%;
}
.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 }}</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>
</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>
3 效果

4. 数据的来源

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


8 django 里面的API的更多相关文章
- easyui里面的API=====》 load
在easyui里面有个API load,这个API实用性质很强,可以直接帮我加载页面的数据到想需要的相应输入框里面,但是也要注意,这些将要被填入数据的输入框里面的属性有个要求:其中输入框里面的name ...
- Django里面的RequestContext
c = RequestContext(request, { 'foo': 'bar', }) get_template('about.html').render(c) 当我们定义一个RequestCo ...
- Django编写RESTful API(四):认证和权限
欢迎访问我的个人网站:www.comingnext.cn 前言: 按照前面几篇文章里那样做,使用Django编写RESTful API的基本功能已经像模像样了.我们可以通过不同的URL访问到不同的资源 ...
- Django编写RESTful API(五):添加超链接提高模型间的关联性
前言 在第四篇中,加入了用户模型,以及相关的认证和权限的功能.但是我们在使用的时候,会发现在访问http://127.0.0.1:8000/users/时看到的用户列表,不能够直接点击某个链接然后查看 ...
- Django编写RESTful API(六):ViewSets和Routers
欢迎访问我的个人网站:www.comingnext.cn 前言 在本系列的文章中,我在第一篇和第二篇文章中写的编写Django视图时,使用的都是基于函数的方法,并且每个视图函数之前都会加一个djang ...
- Django REST Framework API Guide 07
本节大纲 1.Permissions 2.Throttling Permissions 权限是用来授权或者拒绝用户访问API的不同部分的不同的类的.基础的权限划分 1.IsAuthenticated ...
- Django REST Framework API Guide 04
本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...
- Django REST Framework API Guide 02
本节大纲 1.Generic Views 2.ViewSets 1.Generic Views CBV的主要的一个优点就是极大的允许了对于代码的从用.自然,rest framework取其优势,提供 ...
- lhgdialog: iframe页面里面的,确定,关闭、取消按钮的操作
lhgdialog: iframe页面里面的,确定,关闭.取消按钮的操作 如果你正在用lhgdialog,用他人iframe,或者 content:'url:http://www.baidu.com/ ...
随机推荐
- JSTL,JQuery,Ajax,Json
JSTL 的定义 1 JSP 标准标签库 (JavaServerPage Standard Tag Library) 2 JSTL 通常会与EL 表达式合作实现JSP页面的编码 JSTL 的 ...
- SqlServer Alwayson主副本图标显示问号的原因
搭建完alwayson后,登录辅助副本服务器,查看alwayson可用性副本列表,看到主副本前面显示了一个问号,这里借用网上一张图片做展示: 在显示问号的主副本上右键属性查看,“角色”一栏中,显示的是 ...
- springMvc-对servletApi的支持以及把后台对象以json方式传到前台
1.对servletApi的支持:request.response以及session.cookie的支持 2.把后台代码以json格式向前台输出: 代码: package com.java.contr ...
- [Asp.Net] Form验证中 user.identity为false
这个方法可以是user.identity设置为true FormsAuthentication.SetAuthCookie(Username, true); 但是要开启form验证, 在配置文件中 & ...
- pta 编程题16 Saving James Bond - Easy Version
其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...
- RAC基本使用
@interface ViewController () @property (weak, nonatomic) IBOutlet lwRedView *redView; @property (wea ...
- Python监控日志中经常访问的ip
一.需求:每分钟检查一次日志文件,如果这一分钟内同一个ip请求次数超过200次,加入黑名单 1.日志文件中,每一行的格式为:XXX.XXX.XXX.XXX - - [04/Jun/2017:05:25 ...
- python 读取mat文件
import osimport scipy.io as sio import numpy as np #matlab文件名 matfn='/home/user/devkit/data/meta_det ...
- 适配iOS10和Xcode8
1.权限设置 iOS10,访问系统权限需要在info.plist中注册,否则直接crash! 注意,Value值不可为空,否则会被Appstore拒掉! 2.Notification,学习资料 喵神总 ...
- win10搭建FTP服务器
下面就给大家讲解Win10搭建FTP服务器的详细操作方法. 1.首先,我们在Cortana中搜索控制面板并进入: 2.在控制面板-程序中,点击启用或关闭Windows功能: 3.在FTP服务器.Web ...