Django Restframework 实践(一)
具备以下知识:
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 实践(一)的更多相关文章
- Django Restframework 实践(二)
按照自己的方法来写接口 ''' @api_view([ 'POST','GET',]) 允许请求的是get或post方法,这里去掉get那么就不能用get方法请求 @permission_classe ...
- django restframework 的日常使用
本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...
- Django入门实践(三)
Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...
- Django入门实践(二)
Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...
- Django入门实践(一)
Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
- Django项目实践4 - Django网站管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- Django项目实践4 - Django站点管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- django restframework
一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...
随机推荐
- c语言中使用自带的qsort(结构体排序)+ 快排
c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...
- AngularJs几种服务区别
下面说说这几种函数之间的区别: 函数 定义 适合场景 provider(name, Object OR constructor() ) 一个可配置的.有复杂逻辑的服务.如果你传递了一个对象,那么它应该 ...
- 【洛谷P2515【HAOI2010】】软件安装
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...
- JS日历控件特效代码layDate
https://www.js-css.cn/a/jscode/date/2015/0405/1461.html
- python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...
- flask基础之jijia2模板使用基础(二)
前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...
- Mac Sublime Vim模式 方向键无法长按
终端输入 sublime2: defaults write com.sublimetext.2 ApplePressAndHoldEnabled -bool false sublime3: defau ...
- 002利用zabbix监控某个目录大小
近期,因为JMS的消息堆积导致ApacheMQ频率故障(消息没有被消费掉,导致其数据库达到1.2G,JMS此时直接挂掉),很是郁闷!刚好自 己在研究zabbix.既然zabbix如此强大,那么它可以监 ...
- Ubuntu 10.04 分辨率调整
最近学长们看了我的本本都在问我,显卡驱动是不是出现什么问题了···分辨率这么差.当时我的分辨率是1024X768,于是我就想修改我的屏幕分辨率改成1280X800.本来很简单的事情,我做起来却非常的曲 ...
- sed的额外用法(网摘)
#在我开始动手写一个一个的脚本的时候才会看到更多的用法 1. 在某行的前一行或后一行添加内容(前提是要确定行的内容) # 匹配行前加 sed -i '/allow/ideny' httpd.conf ...