具备以下知识:

django

http://www.cnblogs.com/menkeyi/p/5882464.html

http://www.cnblogs.com/menkeyi/p/5882453.html

安装Django Restframework

官方网站

http://www.django-rest-framework.org/

安装方法

pip install djangorestframework

pip install markdown # Markdown support for the browsable API.

pip install django-filter # Filtering support

加入app

在最后一行增加以下内容:允许未认证的用户只读权限

 REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}

创建用户测试一下看看返回值和内容有什么变化

按照api规范  http://localhost/api/users/1 这样就可以查看具体的1(资源)用户,http://localhost/api/users 查看所有用户

接下来看看它是如何实现的:

先看url

from django.conf.urls import include, url
from django.contrib import admin
#导入rest_urls
from assets import rest_urls,urls as asset_urls
import views #根据url(r'^api/',include(rest_urls)),找到api的url入口文件rest_urls
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/',include(rest_urls)),
url(r'asset/',include(asset_urls)),
url(r'^$',views.index,name="dashboard"),
url(r'^login/$',views.acc_login,name='login'),
]

在接着查看rest_urls文件

#_*_coding:utf-8_*_
from django.conf.urls import url, include
#导入routers方法
from rest_framework import routers
import rest_views as views #这个是rest_framework封装django 的routers
router = routers.DefaultRouter()
#注册一下,然后关联后面视图
router.register(r'users', views.UserViewSet)
router.register(r'assets', views.AssetViewSet)
router.register(r'servers', views.ServerViewSet) # Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
#注意看这里 :url(r'^', include(router.urls))
#所有以localhost/api 开头的都去找router.urls
#
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^asset_list/$',views.AssetList ),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

先看一下views.UserViewSet

#_*_coding:utf-8_*_
import myauth
from rest_framework import viewsets
from serializers import UserSerializer, AssetSerializer,ServerSerializer
from rest_framework import status
from rest_framework import permissions
from rest_framework.decorators import api_view,permission_classes
from rest_framework.response import Response
import models #这个跟django的类方法可不一样 以前都是self,现在是一个viewsets.ModelViewSet 类方法
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
#查询用户信息myauth.UserProfile.objects.all().order_by('-date_joined')
#queryset,serializer_class 这个变量名是死的不能改
queryset = myauth.UserProfile.objects.all().order_by('-date_joined')
#UserSerializer 序列化(表现层,将数据按照一定格式来处理然后返回给前端)
serializer_class = UserSerializer

看看UserSerializer是什么东西(这个是自己写的)

#_*_coding:utf-8_*_
from myauth import UserProfile
#导入表结构
import models
#导入rest_framework的serializers方法
from rest_framework import serializers #继承serializers.HyperlinkedModelSerializer超链接方法,看页面都是用链接操作的
class UserSerializer(serializers.HyperlinkedModelSerializer):
#实际这里也对数据进行了验证,但这个认证是由UserProfile表结构来完成。api中没有定义这个验证
class Meta:
#选择对应的表
model = UserProfile
#定义处理UserProfile表中的字段。序列化这些字段。这里只处理UserProfile表的数据,如果传递来的是其它表数据那么对不起 这里会报错
fields = ('url', 'name', 'email','is_admin')
class AssetSerializer(serializers.ModelSerializer):
class Meta:
model = models.Asset
#深度查询等级,资产表是被server表关联的。当查询资产表的时候其实也可以直接查询跟它关联的表。
#depth就是这个作用,当然最好这里别的太深。默认查询0层
depth=2
fields = ('name', 'sn','server','networkdevice') class ServerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Server
#fields = ('name', 'sn','server')

所有流程就完毕了 ,总结下流程。

演示下深度查询的作用:

现在暂时没有数据这里

增加一些数据,先把depth改成0

增加一些数据,先把depth改成1

Django Restframework 实践(一)的更多相关文章

  1. Django Restframework 实践(二)

    按照自己的方法来写接口 ''' @api_view([ 'POST','GET',]) 允许请求的是get或post方法,这里去掉get那么就不能用get方法请求 @permission_classe ...

  2. django restframework 的日常使用

    本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...

  3. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  4. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

  5. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  6. django restframework serializer 增加自定义字段

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...

  7. Django项目实践4 - Django网站管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  8. Django项目实践4 - Django站点管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  9. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

随机推荐

  1. spring bean初始化及销毁你必须要掌握的回调方法

    spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作. 初始化的时候实现的方法 1.通过java提供的@PostConstruct注解: 2.通过实现spring提供的Initi ...

  2. IFeatureCursorProxy.flush AutomationException: 0x80041538

    添加面的时候碰到的一个问题,有些数据没问题,有些报错,后来请教一位同事说有可能是经纬度字段的数据精度问题,因为投影坐标系统不同,支持的经纬度经度不同,后来转换投影坐标系统后果然解决问题了,我一开始也怀 ...

  3. Lua的各种资源2

    Lua Directory     This page is a top level directory of all Lua content at this wiki, grouped by top ...

  4. 通用标签、属性(body属性、路径、格式控制)

    通用标签.属性 一.body属性 1.bgcolor属性:网页背景颜色 2.text属性:规定文档中所有文本的颜色. 3.background属性:规定文档的背景图像. 二.路径 1.绝对路径: 从根 ...

  5. oracle查看表中数据的大小

    通过从视图 user_segments的字段 bytes中找到 select SUM(bytes)/1024/1024 from user_segments where segment_name='E ...

  6. 4B/5B编码原理

    4B/5B编码原理 什么是4B/5B编码? 4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示: 为什么要进行4B/5B ...

  7. 「caffe编译bug」python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory

    在Makefile.config找到PYTHON_INCLUDE,发现有点不同: PYTHON_INCLUDE := /usr/include/python2.7 \         /usr/lib ...

  8. 使用xbee连接地面站和飞控

    Zigbee是一种短距离.低功耗的近距离无线组网通讯技术,主要适用于自动控制和远程控制领域,可以嵌入各种设备. DIGI的ZigBee产品XBee小型但却是一个功能完善的ZigBee收发器(即接收器/ ...

  9. PIL图片合成旋转缩放

    用PIL实现图片的旋转,缩放,合成 我们需要知道合成位置的中心点坐标,用中心点坐标,不使用左顶点的坐标是由于缩放过程容易计算. 假设A是局部透明的图片,我们希望把B放在A的底部,仅从A的透明部分显示B ...

  10. SwitchSharp代理插件的安装和使用

    参考链接: http://bbs.feng.com/read-htm-tid-8227283.html 安装参考链接: http://jingyan.baidu.com/article/380abd0 ...