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. C#中的多态性

    1.重载(overload) public void Sleep() { Console.WriteLine("Animal睡觉"); } public int Sleep(int ...

  2. mysql设置远程访问权限

     查一下你的MYSQL用户表里, 是否允许远程连接  1.授权 mysql>grant all privileges on *.*  to  'root'@'%'  identified by  ...

  3. 迭代器学习之一:使用IEnumerable和IEnumerator接口

    写博客是检验我学习的成果之一以及自我总结的一种方式,以后会经常利用这种方式进行技术交流和自我总结,其中认识不深难免会有错误,但是一直懂得不懂就问,不懂就学的道理! 1.首先看一个简单的列子 , , , ...

  4. log4net各种Filter使用【转】

    log4net各种Filter使用[转] log4net里面的filter类常用的为:      1.DenyAllFilter         拒绝所用的日志输出         <filte ...

  5. 常见的web容器与应用程序服务器区别及对比

    tomcat 类型:servlet容器和HTTP web服务器 功能:实现了一些J2EE特性包括Java Servlet.JSP页面.Java EL和websocket,还有纯java的http we ...

  6. undefined method `environment' for nil:NilClass when importing Bootstrap into rails

    今天做项目时往Gemfile里加了各gem, 然后bundle update了一下, 然后悲剧了,出现了undefined method `environment' for nil:NilClass ...

  7. 商品库存“存取设计”,MySQL事务、表锁、行锁

    MySQL  使用 SELECT ... FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation level 为 REPEATA ...

  8. 4. K线基础知识

    1. K线基础知识 K线又叫阴阳线.蜡烛图.最早由日本米市商人发明,后来推广应用到金融行情价格的分析. K线图的构造主要包含四个价格因素:开盘价.收盘价.最高价.最低价 2. K线图例 收盘价高于开盘 ...

  9. iOS如何跳到系统设置里的各种设置界面

    最近项目需要授权时候跳转到相关的设置页面,自己总结了一下,想写到简书上来,和大家分享一下. 在本人测试后,iOS8和9都没有问题,直接跳转到各个页面,这可能苹果对这方面开放了吧.第一步修改plist文 ...

  10. 安装配置LDAP遇到的问题

    问题1:安装完启动ldap服务报错: ldap: unrecognized service? 原因在于新版的openldap将服务名改为了slapd,使用service slapd start即可启动 ...