具备以下知识:

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

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

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

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

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

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

先看url

  1. from django.conf.urls import include, url
  2. from django.contrib import admin
  3. #导入rest_urls
  4. from assets import rest_urls,urls as asset_urls
  5. import views
  6.  
  7. #根据url(r'^api/',include(rest_urls)),找到api的url入口文件rest_urls
  8. urlpatterns = [
  9. url(r'^admin/', include(admin.site.urls)),
  10. url(r'^api/',include(rest_urls)),
  11. url(r'asset/',include(asset_urls)),
  12. url(r'^$',views.index,name="dashboard"),
  13. url(r'^login/$',views.acc_login,name='login'),
  14. ]

在接着查看rest_urls文件

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

先看一下views.UserViewSet

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

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

  1. #_*_coding:utf-8_*_
  2. from myauth import UserProfile
  3. #导入表结构
  4. import models
  5. #导入rest_framework的serializers方法
  6. from rest_framework import serializers
  7.  
  8. #继承serializers.HyperlinkedModelSerializer超链接方法,看页面都是用链接操作的
  9. class UserSerializer(serializers.HyperlinkedModelSerializer):
  10. #实际这里也对数据进行了验证,但这个认证是由UserProfile表结构来完成。api中没有定义这个验证
  11. class Meta:
  12. #选择对应的表
  13. model = UserProfile
  14. #定义处理UserProfile表中的字段。序列化这些字段。这里只处理UserProfile表的数据,如果传递来的是其它表数据那么对不起 这里会报错
  15. fields = ('url', 'name', 'email','is_admin')
  16. class AssetSerializer(serializers.ModelSerializer):
  17. class Meta:
  18. model = models.Asset
  19. #深度查询等级,资产表是被server表关联的。当查询资产表的时候其实也可以直接查询跟它关联的表。
  20. #depth就是这个作用,当然最好这里别的太深。默认查询0层
  21. depth=2
  22. fields = ('name', 'sn','server','networkdevice')
  23.  
  24. class ServerSerializer(serializers.ModelSerializer):
  25. class Meta:
  26. model = models.Server
  27. #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. (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子

    本篇先介绍HBase在伪分布式环境下的安装方式,然后将MapReduce编程和HBase结合起来使用,完成WordCount这个例子. HBase在伪分布环境下安装 一.   前提条件 已经成功地安装 ...

  2. 面向对象 ( OO ) 的程序设计——继承

    本文地址:http://www.cnblogs.com/veinyin/p/7608282.html  仅支持实现继承,且主要依靠原型链来实现,不过一般会混合构造函数一起实现继承 1 原型链 继承使用 ...

  3. 如何阻止自动更新‘updated_at’和'created_at'

    可以在模版中添加一条代码: public $timestamps = false;

  4. Laravel 5.4 migrate时报错: Specified key was too long error

    Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...

  5. three.js轨道控制器OrbitControls.js

    https://blog.csdn.net/qq_37338983/article/details/78575333 文章地址

  6. 深入理解Spring系列之八:常用的扩展接口

    转载 https://mp.weixin.qq.com/s/XfhZltSlTall8wKwV_7fKg Spring不仅提供了一个进行快速开发的基础框架,而且还提供了很多可扩展的接口,用于满足一些额 ...

  7. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  8. Android设备相关配置

    http://source.android.com/devices/tech/storage/index.html Android supports devices with external sto ...

  9. (转)USB体系结构

    转载地址:http://blog.ednchina.com/zenhuateng/203584/Message.aspx USB总线接口层:物理连接.电气信号环境.信息包传输机制:主机一方由USB主控 ...

  10. (转)USB的描述符及各种描述符之间的依赖关系

    全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...