Restful API官方文档
理解Restful架构:http://www.ruanyifeng.com/blog/2011/09/restful
RESTful设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
Django REST framework文档:http://www.django-rest-framework.org/#installation
Django RESTful 中文翻译:http://blog.csdn.net/ppppfly/article/category/6170709
基于Django的RESTful安装
第一步:使用pip安装:
pip3 install djangorestframework
pip3 install djangorestframework -i http://pipy.douban.com/simple #豆瓣源
第二步:添加rest_framework到settings中的INSTALLED_APPS中:
INSTALLED_APPS = ( ... 'rest_framework', )
如果你需要使用浏览器API,需要添加REST framework的登录注销模块,需要将下面的代码添加到urls.py中:
urlpatterns = [
...
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
注意:URL路径可以任意编写,但你必须include 'rest_framework.urls',且使用'rest_framework'这个namespace(命名空间)。如果你的Django是1.9+版本,你也可以不写namespace,REST framework会帮你自动设置。
例子
让我们看一个简单用例:如何用REST framework 来搭建一个简单的支持modle的API。
我们将创建一个读/写API,来处理我们项目中的用户信息。
任何REST framework的全局设置,都存放在一个配置字典(dictionary,有些语言如Java中的map)中,名为REST_FRAMEWORK。我们从以下的操作开始,把下面的内容添加到你的settings.py模块中:
REST_FRAMEWORK = {
# 使用Django的标准`django.contrib.auth`权限管理类,
# 或者为尚未认证的用户,赋予只读权限.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
别忘了,确保你已经将 rest_framework 添加到你的INSTALLED_APPS中。
现在我们已做好准备,来创建我们的API了。这是我们的项目根下urls.py模块:
from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets # Serializers定义了API的表现形式.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff') # ViewSets 定义了 视图(view) 的行为.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer # Routers 提供了一种简单途径,自动地配置了URL。
router = routers.DefaultRouter()
router.register(r'users', UserViewSet) # 使用自动的URL路由,让我们的API跑起来。
# 此外,我们也包括了登入可视化API的URLs。
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
现在你可以在浏览器的http://127.0.0.1:8000/里,打开你新建的’users’ API了。使用右上角的登陆控制,可以对系统用户进行新增和删除操作
from django.conf.urls import url, include
#从已存在的assets项目中导入数据models模块
from assets import models
from rest_framework import routers,serializers,viewsets #定义一个表现形式
class UserSerializer(serializers.ModelSeriallizer):
class Meta:
model = models.UserProfile
fields = ('username','name','token','email','is_staff') class AssetSerializer(serializers.ModelSerializer):
class Meta:
model = models.Asset
...
from rest_framework import viewsets
from assets import models
from assets import rest_searializer class UserViewSet(viewsets.ModelViewSet):
queryset = models.UserProfile.objects.all()
serializer_class = rest_searializer.UserSerializer class AssetViewSet(viewsets.ModelViewSet):
queryset = models.Asset.objects.all()
serializer_class = rest_searializer.AssetSerializer
rest_urls.py:
from rest_framework import routers
from django.conf.urls import url,include
from assets import rest_viewset router = routers.DefaultRouter()
router.register(r'users',rest_viewset.UserViewSet)
router.register(r'assets',rest_viewset.AssetViewSet)
router.register(r'manufactory',rest_viewset.ManufactoryViewSet)
router.register(r'business_unit',rest_viewset.BusinessUnitViewSet) urlpatterns = [
url(r'',include(router.urls)),
url(r'^api-auth',include('rest_framework.urls',namespace='rest_framework'))
]
settings.py:
REST_FRAMEWORK = {
# 使用Django的标准`django.contrib.auth`权限管理类,
# 或者为尚未认证的用户,赋予只读权限.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
使用API插入数据的例子,views.py中:
def api_test(request):
if request.method =="GET":
return render(request,"test_post.html")
else:
data = json.loads(request.POST.get("data"))
print("--->",data)
rest_obj = rest_searializer.AssetSerializer(data=data,many=True)
if rest_obj.is_valid():
rest_obj.save()
return render(request,"test_post.html",{"errors":rest_obj.errors,"data":rest_obj.data})
其中many=true,是将queryset多对多序列化,详细参数后面会有表述.
dss.Serializer 提供序列器
function serializer(data, datetime_format='timestamp', output_type='raw', include_attr=None, except_attr=None, foreign=False, many=False)
Parameters:
data(Required|(QuerySet, Page, list, django model object))-待处理数据
datetime_format(Optional|string)-如果包含 datetime 将 datetime 转换成相应格式.默认为 "timestamp"(时间戳)
output_type(Optional|string)-serialize type. 默认“ raw ”原始数据,即返回 list 或 dict
include_attr(Optional|(list, tuple))-只序列化 include_attr 列表里的字段。默认为 None
exclude_attr(Optional|(list, tuple))-不序列化 except_attr 列表里的字段。默认为 None
foreign(Optional|bool)-是否序列化 ForeignKeyField 。 include_attr 与 exclude_attr 对 ForeignKeyField 依旧有效。 默认为 False
many(Optional|bool)-是否序列化 ManyToManyField 。 include_attr 与 exclude_attr 对 ManyToManyField 依旧有效 默认为 False
参考:http://www.django-rest-framework.org/
参考:http://www.cnblogs.com/ccorz/p/Django-zhiRestful-API.html
Restful API官方文档的更多相关文章
- SolrJ API 官方文档最佳实践
以下内容译自Solr Wiki官方文档,版权没有,随意转载. Solrj 是一个访问solr的Java客户端.它提供了一个java接口用于添加更新和查询solr索引.本页面介绍SolrJ最新版本1.4 ...
- 【Android API】Android 4.1 API官方文档详解
原文:http://android.eoe.cn/topic/summary 翻译:[eoeAndroid原创团队]kris.流风而逝.贼寇在何方.snowxwyo.lsy4833406 更新日期:2 ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (一)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (二)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (四)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (三)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- Search API 官方文档 可以用了查看自己的app
Search API October 24, 2012 - HTTPS is now supported for Search and Lookup requests. Please update y ...
- ElasticSearch(6.2.2)的java API官方文档的总结 (三)
一 : SearchRequest用于任何与搜索文档,聚合和建议有关的操作,并且还提供了对生成的文档进行高亮显示的方法. 在最基本的形式中,我们可以向请求添加一个查询: 1:添加一个Search ...
- lua api 官方文档 函数后面的方括号 说明 [-0, +0, –]
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段.c++/lua/windows逆向交流群:69148232 每一个lua api 函数结尾都给出了这样的说明例如: ...
随机推荐
- c# 获取当前行的位置信息
StackTrace st = new StackTrace(new StackFrame(true)); StackFrame sf = st.GetFrame(0); //文件位置 Console ...
- Android 反编译工具
想必玩安卓的童鞋大多都知道,安卓的APK安装包是可以反编译出源代码的,如果开发人员发布时没有对其混淆等加密处理,反编译出来的代码几乎与真实的源代码一模一样. 想要反编译apk,需要用到apktool. ...
- Ubuntu下安装Python3.4及用python编译py文件
1.安装python 3.4程序 sudo apt-get install python3.4 2.python 3.4是被默认安装在/usr/local/lib/python3.4,删除默认pyth ...
- Codeforces Round #373 (Div. 2) C. Efim and Strange Grade —— 贪心 + 字符串处理
题目链接:http://codeforces.com/problemset/problem/719/C C. Efim and Strange Grade time limit per test 1 ...
- Ansible 动态获取主机列表
参考文献: http://www.linuxidc.com/Linux/2016-12/138111.htm 附加 这个 include_vars 变量,可以 动态分别环境或者其他条件- hosts: ...
- python把字典写入excel之一例
直接上代码: # -*- coding: utf-8 -*- import xlsxwriter #生成excel文件 def generate_excel(expenses): workbook = ...
- android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE. android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新 ...
- linux系统配置之网络配置(centos)
CentOS---网络配置详解 一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里,跟网络有关的主要设置文件如下: /etc/host.conf 配置域名服务 ...
- 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ...
- 疯狂LCM
传送门 题目要求求: \[\sum_{i=1}^nlcm(i,n)\] 先转化成gcd处理: \[n\sum_{i=1}^n\frac{i}{gcd(i,j)}\] 之后老套路 枚举gcd,并且先把d ...