具备以下知识:

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. How to reset XiaoMi bluetooth headphone Youth edition.

    To reset the speaker 1. Long press the phone call button to shut off the speaker 2. Connect the char ...

  2. 【leetcode 简单】第十题 实现strStr()

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  3. 环境变量配错了 command not found

    一般就是忘记在PATH 前面加$ 1.可以用whereis或者which命令查看一下有没有这个命令 具体执行which lswhereis ls 2.系统环境变量导致的问题解决方案: exportPA ...

  4. php sprintf格式化注入

    URL:http://efa4e2c2b8df4ce69454639f4e3727071652c31167f341a4.game.ichunqiu.com/ 简单的说就是sprintf中%1$\'会将 ...

  5. [转载]Selenium実行中にJavaScriptのコードを実行する

    Selenium実行中にJavaScriptのコードを実行する JavaScriptで画面の値を取得/設定するコードをメモ. WebDriverEx.cs // JavaScriptを実行(戻り値なし ...

  6. URAL题解一

    URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...

  7. ECMAScript 6 Promise 对象

    一.Promise的含义 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息. 1. ...

  8. HTTP 请求 的方法Util

    HTTP请求 的一系列方法总结 /** * *******************************传统请求--开始************************************** ...

  9. [How to] HBase的bulkload使用方法

    1.简介 将数据插入HBase表中的方法很多,我们可以通过TableOutputFormat以Mapreduce on HBase的方式将数据插入,也可以单纯的使用客户端API将数据插入.但是以上方法 ...

  10. Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,输出异常

    Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,出现请求异常时,会进入熔断处理,但是不会抛出异常信息. 经过以下配置,可以抛出异常: 将原有ErrorEncoder ...