Tastypie 学习笔记
Tastypie是什么? 运行于Python环境中的 Django web服务器下的 Restful 风格API接口 (python 类库)
快速浏览更多在线 Demo
想查看源代码,可以自行F12,或在github中直接查看源码,或者欢迎直接留言。
1、安装下面环境或者依赖包到python库(安装过程类似django 在命令行cd 到下载的文件目录中,输入python setup.py install就可以安装了)
- Python 2.6+ or Python 3.3+
- Django 1.5+
- python-mimeparse 0.1.4+ (http://pypi.python.org/pypi/python-mimeparse) 须下载安装
- dateutil (http://labix.org/python-dateutil) 高级点的python自带,不行的话就重新下载安装
- OPTIONAL - lxml (http://lxml.de/) and defusedxml(https://pypi.python.org/pypi/defusedxml) if using the XML serializer 可选 用于处理XML序列化
- OPTIONAL - pyyaml (http://pyyaml.org/) if using the YAML serializer 可选 用于处理YAML序列化
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结果
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 学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- 在Windows Server 2008中布置Web站点时遇到的问题及解决办法
首先安装了VS2012. 首先在计算机--管理 中添加服务器角色, 添加角色: 进行各种设置: 选择对应的应用程序池,原来默认的是: 需要添加一个4.0的. 添加后,原因:在安装Framework v ...
- 线程安全的无锁RingBuffer的实现
这里的线程安全,是指一个读线程和一个写线程,读写两个线程是安全的,而不是说多个读线程和多个写线程是安全的.. 在程序设计中,我们有时会遇到这样的情况,一个线程将数据写到一个buffer中,另外一个线程 ...
- 在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题
今天在写为一些project 写 一些junit test 的时候,出现下面的异常: java.lang.UnsupportedClassVersionError: moneytest/Money ...
- [Nhibernate]一级缓存
目录 写在前面 文档与系列文章 一级缓存 一个例子 一级缓存管理 总结 写在前面 上篇文章介绍了nhibernate中对象的三种状态,通过对象的三种状态,很容易想到缓存. 什麽是缓存? 有时候,某些数 ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- 解决在ScrollView中套用ListView显示不正常
最近在设计Android程序时,因为需要在ScrollView中添加一个ListView列表来显示一些信息.刚开始并没有想太多,但添加进去后才发现ListView不论怎样定义都只能显示一行,显示效果很 ...
- tyvj1144 股票
描述 2130年,股神巴菲特投胎了!他投胎到你身上!你作为股神转世,能力比原股神还要强,你可以预测到今后n天的股价.假设刚开始你的手上有1元钱,你想知道n天后你最多可以赚到多少钱.作为股神转世,你准备 ...
- Reprint: ADB is Not Recognized as an internal or external command Fix
ADB: Android Debug Bridge http://zacktutorials.blogspot.hk/2013/04/adb-is-not-recognized-as-internal ...
- css3的基本样式
一.css3字体(@font-face) 二.css3动画 三.css3多列 四.CSS3 outline-offset 属性 五.CSS3 resize 属性