Tastypie是什么? 运行于Python环境中的 Django web服务器下的 Restful 风格API接口  (python 类库)

快速浏览更多在线 Demo

想查看源代码,可以自行F12,或在github中直接查看源码,或者欢迎直接留言。

1、安装下面环境或者依赖包到python库(安装过程类似django 在命令行cd 到下载的文件目录中,输入python setup.py install就可以安装了

2、安照之前django教程建立了一个名为blog的app

D:\project\tastypie\mysite\blog\models.py 数据模型文件如下:

from tastypie.utils.timezone import now
from django.contrib.auth.models import User
from django.db import models
from django.utils.text import slugify # Create your models here.
class Entry(models.Model):
user = models.ForeignKey(User)
pub_date = models.DateTimeField(default=now)
title = models.CharField(max_length=200)
slug = models.SlugField()#当你看见当下网页url后面出现a-b-c-d-f类似的字符串,就是被slugify了
body = models.TextField() def __str__(self):
return self.title def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)[:50] return super(Entry,self).save(*args, **kwargs)

3、在blog项目中配置tastypie

D:\project\tastypie\mysite\mysite\settings.py配置文件加入tastypie[非必要的]

# Application definition

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'tastypie',
)

4、创建API资源

D:\project\tastypie\mysite\blog\api\resources.py(手动创建的目录及文件)

from django.contrib.auth.models import User
from tastypie.authorization import Authorization
from tastypie import fields
from tastypie.resources import ModelResource ,ALL ,ALL_WITH_RELATIONS
from blog.models import Entry class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
excludes = ['email','password','is_active','is_staff','is_superuser']
#fields=['username','first_name','last_name','last_login']
#allowed_methods = ['get']
authorization = Authorization()
filtering={
'username':ALL,
} class EntryResource(ModelResource):
user = fields.ForeignKey(UserResource,'user')
class Meta:
queryset = Entry.objects.all()
resource_name = 'entry'
authorization = Authorization()
filtering = {
'user' : ALL_WITH_RELATIONS,
'pub_date':['exact','lt','lte','gte','gt'],
}

5、url配置

主url配置,D:\project\tastypie\mysite\mysite\urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
from tastypie.api import Api
from blog.api.resources import EntryResource,UserResource v1_api = Api(api_name='v1')
v1_api.register(UserResource())
v1_api.register(EntryResource()) urlpatterns = patterns('',
# Examples:
(r'^blog/', include('blog.urls',namespace="blog")),
(r'^api/', include(v1_api.urls)),
(r'^admin/', include(admin.site.urls)),
)

子url配置(主要是用来玩ajax调用等会使用),D:\project\tastypie\mysite\blog\urls.py

from django.conf.urls import patterns,url
from blog import views urlpatterns=patterns('',
url(r'^$',views.IndexView.as_view(),name='index'),
)

6、下载个cURL工具加入到环境变量中使用,用于测试链接

7、开始玩API了

1)用命令行输入

curl http://localhost:8000/api/v1/
得到如下json内容
{
"entry": {
"list_endpoint": "/api/v1/entry/",
"schema": "/api/v1/entry/schema/"
},
"user": {
"list_endpoint": "/api/v1/user/",
"schema": "/api/v1/user/schema/"
}
}

2)输入

curl http://localhost:8000/api/v1/entry/
列出所有的json数据
curl http://localhost:8000/api/v1/entry/schema/ 列出所有的操作权限,如get post put delete patch

3)下面我们在同个域下面用静态网页加上jquery的ajax来玩 Tastypie与jQuery互动

3.1)先加个template文件:D:\project\tastypie\mysite\blog\templates\blog\index.html 记得在setting文件中加路径引用TEMPLATE_DIRS = [os.path.join(BASE_DIR,'templates')]

<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title> </head>
<body>
<script type="text/javascript" src="/static/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="/static/js/json2.js"></script>
<script>
$(document).ready(function () {
$.ajax({
url: 'http://localhost:8000/api/v1/entry/1/',
type: 'GET',
dataType: 'json',
success: function (data) {
console.log(data);
}
});
});
</script>
</body></html>

3.2)绑定个view:D:\project\tastypie\mysite\blog\views.py

from django.shortcuts import render
from django.views import generic # Create your views here.
class IndexView(generic.ListView):
template_name='blog/index.html'
context_object_name='' def get_queryset(self):
"""Return the last five published question"""
return ''

3.3)前面提到的配置子url:D:\project\tastypie\mysite\blog\urls.py

from django.conf.urls import patterns,url
from blog import views urlpatterns=patterns('',
url(r'^$',views.IndexView.as_view(),name='index'),
)

3.4)好,用Chrome 测试ajax调用,GET方法,输入url http://localhost:8000/blog/   

按F12看log结果

Object {body: "test1", id: 1, pub_date: "2015-01-28T12:14:49", resource_uri: "/api/v1/entry/1/", slug: "test1"…}

3.5)现在看测试,POST方法,注意用了json2类库,js代码改为

        var data = JSON.stringify({
"title": "Another Post 3",
"body": "This will prbbly be my 1st post.",
"pub_date": "2015-01-29T11:07:30",
"slug": "another-post",
"user": "/api/v1/user/1/"
});
$.ajax({
url: 'http://localhost:8000/api/v1/entry/',
type: 'POST',
contentType: 'application/json',
data: data,
dataType: 'json',
processData: false,
success: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
} });

用浏览器看结果:输入http://localhost:8000/api/v1/entry/?format=json

{"body": "This will prbbly be my 1st post.", "id": 7, "pub_date": "2015-01-29T11:07:30", "resource_uri": "/api/v1/entry/7/", "slug": "another-post", "title": "Another Post 3", "user": "/api/v1/user/1/"} 记录已经POST成功了!

3.6)

PUT 、PATCH 、DELETE,逐个试过可以成功运行!

Tastypie 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. 【转载】Java反射: 数组

    原创链接:http://czj4451.iteye.com/blog/1479486 java.lang.reflect.Array Java反射机制通过Array类来处理数组,结合java.lang ...

  2. Google Maps API V3 之 路线服务

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  3. 获取页面内iframe里面的元素

    结构直接看图比较直接 这里window.frames获取的是iframe的数组 要记得给iframe加个ID才行 后面的记录会详细讲解 在父窗口获取页面内的iframe 里面的元素window.fra ...

  4. 浅谈Android中Activity的生命周期

    引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...

  5. C语言基础(6)-char类型

    1. char常量.变量 使用单引号‘’引起来的就是char的常量 ‘a’是一个char类型的常量 “a”是一个字符串类型的常量 1是一个int型的常量 ‘1’是一个char型的常量 char a; ...

  6. redis和memcached的区别(总结)

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  7. R语言:规划求解优化ROI

    今天看到一篇文章介绍如何用excel建模对ROI 进行规划求解. 蓝鲸的网站分析笔记 成本 Cost 每次点击费用 CPC 点击量 \[clickRate = \frac{cost}{CPC}\] 转 ...

  8. C和指针 第十四章 预处理器 头文件

    编写一个C程序,第一个步骤称为预处理,预处理在代码编译之前,进行一些文本性质的操作,删除注释.插入被include的文件.定义替换由#define定义的符号,以及确定代码的部分内容是否应该按照条件编译 ...

  9. VMware中的Ubuntu网络设置

    网络配置: VMware安装后会有两个默认网卡,分别是VMnet8(192.168.83.1)和VMnet1(192.168.19.1),当然不同的机器上,这两个网卡的 IP会不同的.在windows ...

  10. (备忘)Rect和RectF的区别

    1.Rect的变量使用int类型,而RectF使用float类型. 2.一些方法区别 <1>.Rect类 equals(Object obj) (for some reason it as ...