1.rest_framework的作用

1)可以对orm和非orm资源序列化

2)支持restful风格编程(POST,PUT,PATCH)

3)使用类视图编写API的view,而不是函数视图,类视图更符合代码的设计模式。

4)用户认证和权限控制

2.使用示例

功能如下:管理员查看,编辑用户,组信息

1)新建名为tutorial的Project,创建一个名为quickstart的APP

创建表,创建超级管理员

django-admin startproject tutorial
cd tutorial
django-admin startapp quickstart
python manage.py migrate
python manage.py createsuperuser

2)序列化

创建文件/tutorial/quickstart/serializers.py编写序列化相关的代码

所谓序列化是指将对象类型转换为json格式,反序列化是指将json格式转换为对象

from django.contrib.auth.models import User, Group
from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')

3)Views

视图访问层,会在url路由中注册,访问url时,会进入到响应的视图中处理响应。

from django.shortcuts import render
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer
# Create your views here. class UserViewSet(viewsets.ModelViewSet):
"""
查看,编辑用户界面
"""
queryset = User.objects.all()
serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet):
"""
查看,编辑组
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer

4)url注册

编写tutorial/urls.py,注册url

from django.conf.urls import url, include
from django.contrib import admin from rest_framework import routers from quickstart import views router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet) urlpatterns = [
url(r'^', include(router.urls)),
url(r'^admin/', admin.site.urls),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

使用router.register注册视图,将router.urls放入urlpatterns列表中

5)Settings设置

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
] REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGE_SIZE': 10
}

DEFAULT_PERMISSION_CLASSES:定义权限,只有管理员用户才能访问

PAGE_SIZE:定义分页条数

6)测试api

启动服务

python manage.py runserver

运行结果:

bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "admin@example.com",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
},
{
"email": "tom@example.com",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}

浏览器访问,因为有了权限控制,所以要先登录

最新文章

  1. ASP.NET MVC 过滤器(三)
  2. 【 2013 Multi-University Training Contest 6 】
  3. 最完美解决方案:js弹出窗口关闭当前页面,而不弹出提示框
  4. KBS2 SBS MBC 高清播放地址 + mplayer 播放 录制
  5. C语言培训第一天
  6. sqlserver 2008 服务器拒绝连接;拒绝访问指定的数据库
  7. web APi角色认证
  8. apt-get命令讲解
  9. WingIDE注册破解方法
  10. oracle 按某个字段查询重复数据
  11. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)
  12. http-server 命令行
  13. 03(3) 基于GMM-HMM的SR基础
  14. PowerShell 远程执行任务
  15. Android--Task和BackStack高级
  16. [Java]直播方案----[接入环信聊天室]+[腾讯云直播]
  17. 基于springboot的ssm
  18. /lib/lsb/init-functions
  19. Python之旅Day9 进程&线程
  20. 前端之javascript的DOM对象和标签

热门文章

  1. Javascript判断Crontab表达式是否合法
  2. OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法
  3. 导致线程死锁容易忽略的一点 SendMessage
  4. vscode用法
  5. Sqlserver大数据量分区表创建
  6. HTTP 请求头 Header
  7. mysql升级5.5
  8. 12C的审计模式
  9. Oracle 12C -- temporal validity
  10. jquery中页面Ajax方法$.load的功能