Django REST Framework(简称DRF),是一个用于构建Web API的强大且灵活的工具包。

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。

简单来说,RESTful架构:

(1)每一个URI代表一种资源;

(2)客户端和服务器之间,传递这种资源的某种表现层;

 (3)客户端通过四个HTTP动词(GET、POST、PUT、DELETE),对服务器端资源进行操作,实现"表现层状态转化"。

理解restful:RESTful API 设计指南理解RESTful架构

安装配置相关

1、安装

pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support

可选安装:

  • coreapi(1.32.0+) – 支持模式生成。
  • Markdown(2.1.0+) – Markdown支持可浏览的API。
  • django-filter(1.0.1+) – 过滤支持。
  • django-crispy-forms – 改进的HTML显示过滤。
  • django-guardian(1.1.1+) – 支持对象级别的权限控制。

2、注册到app

INSTALLED_APPS = (
...
'rest_framework',
)

3、配置可视化api

urlpatterns = [
...
url(r'^api-auth/', include('rest_framework.urls'))
]

4、简单应用

1、先创建一个模型

class Role(models.Model):
"""
角色表
"""
title = models.CharField(max_length=32, verbose_name="角色名称") class Meta:
verbose_name = "角色表"
verbose_name_plural = "角色表" def __str__(self):
return self.title class User(models.Model):
"""
用户表
"""
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=32, verbose_name="用户名")
password = models.CharField(max_length=128, verbose_name="密码")
email = models.CharField(max_length=32, verbose_name="邮箱")
roles = models.ManyToManyField(to="Role", blank=True, verbose_name="用户关联的角色") class Meta:
verbose_name = "用户表"
verbose_name_plural = "用户表" def __str__(self):
return self.username

2、Serializers(序列化器)

序列化数据,在models.py 同级目录下新建一个serializers.py

from rest_framework import serializers

# HyperlinkedModelSerializer 会自动生成一个 url 字段来表示超链接
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'roles')
#fields = “all”
class RoleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Role
fields = ('title', 'permissions')

3、Views

开始写视图函数

ViewSets是一个视图集,就是把所有常见的行为组合在一起,而不是编写多个视图。如果需要的话,我们可以很容易地将这些视图分解成单独的视图,但是使用视图集使视图逻辑很好地组织,并且非常简洁。

from rest_framework import viewsets
from .serializers import UserSerializer,RoleSerializer class UserViewSet(viewsets.ModelViewSet):
"""
允许用户查看或编辑的API路径。
"""
queryset = User.objects.all()
serializer_class = UserSerializer class RoleViewSet(viewsets.ModelViewSet):
"""
允许角色查看或编辑的API路径。
"""
queryset = Role.objects.all()
serializer_class = RoleSerializer

3、URLs

配置路由

因为我们使用视图集而不是视图,所以我们可以自动为我们的API生成URL conf,只需向routers类注册视图集即可

from rest_framework import routers
from rest_framework.documentation import include_docs_urls
router = routers.DefaultRouter() 
router.register(r'users', views.UserViewSet)
router.register(r'roles', views.RoleViewSet)
urlpatterns = [
    path('api/rbac/', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
path('docs/', include_docs_urls(title="rest_frameworkc api")),
]

4、Settings

所有REST框架的全局设置都被保存到一个叫做REST_FRAMEWORK的配置字典中

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser', # 登录用户才可访问
],
'PAGE_SIZE': 10 # 分页相关
}

5、Serializers与Views详细使用

serializers.py

from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import User class UserCreateSerializer(ModelSerializer): class Meta:
model = User
fields = ('user', 'username', 'email', 'roles') class UserlistSerializer(ModelSerializer): class Meta:
model = User
fields = ('user', 'username', 'email', 'roles') class UserdetailSerializer(ModelSerializer): class Meta:
model = User
fields = ('user', 'username', 'email', 'roles')

view.py

from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import status
from .serializers import *
from .models import User class UserViewSet(ModelViewSet):
def create(self, request, *args, **kwargs):
self.serializer_class = UserCreateSerializer
data = request.data.dict()
serializer = UserCreateSerializer(data=data)
if not serial.is_valid():
return Response(status=status.HTTP_400_BAD_REQUEST) serializer.save()
return Response(serializer.data) def destroy(self, request, *args, **kwargs):
pass def update(self, request, *args, **kwargs):
pass def list(self, request, *args, **kwargs):
self.serializer_class = UserListSerializer
self.queryset = User.objects.all()
return super(UserViewSet, self).list(request) def retrieve(self, request, *args, **kwargs):
pk = kwargs.get('pk', 1)
self.serializer_class = UserDetailSerializer
self.queryset = User.objects.filter(pk=pk)
return super(UserViewSet, self).retrieve(request)

create、destroy、update、list、retrieve方法都是djangoframework默认已经有的,根据请求方法的不同调用不同的处理方式

Django REST Framework简单入门(一)的更多相关文章

  1. Django REST framework完全入门

    Django REST framework 一个强大灵活的Django工具包,提供了便捷的 REST API 开发框架 我们用传统的django也可以实现REST风格的api,但是顶不住Django ...

  2. Django REST framework快速入门指南

    项目设置 创建一个名为tutorial的新Django项目,然后开始一个名为quickstart的新应用程序. # Create the project directory mkdir tutoria ...

  3. Django REST framework快速入门(官方文档翻译翻译)

    开始 我们将创建一个简单的API来允许管理员用户查看和编辑系统中的用户和组. 项目设置 创建一个新的django项目,命名为:<tutorial>,然后创建一个新的应用程序(app),命名 ...

  4. Django REST framework简单使用

    详细的见 https://github.com/linux-wang/DRF_tutorial/blob/master/README.md DRF中有一个serializer的概念,实现的功能是将各种 ...

  5. Django Rest framework实现流程

    目录 一 什么是restful架构 二 Django REST framework简介 三 Django REST framework原理 四 Django REST framework源码流程 五 ...

  6. django rest framework 入门

    django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...

  7. Django REST framework入门 (转自中文文档)

    快速入门 我们将创建一个简单的允许管理员用户查看和编辑系统中的用户和组的API. 项目设置 创建一个名为 tutorial 的新django项目,然后启动一个名为 quickstart 的新app. ...

  8. RESTful架构&简单使用Django rest framework

    RESTful架构 1 什么是REST REST全称是Representational State Transfer,中文意思是表述性状态转移. 它首次出现在2000年Roy Fielding的博士论 ...

  9. Django Rest Framework Serializer的简单使用

    1.RESTful 1.1 定义 REST(Representational State Transfer)与技术无关,代表一种软件架构风格,中文为表征状态转移. 1.2 RESTful API设计 ...

随机推荐

  1. C# 基础小知识之yield 关键字

    对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法.运算符或 get 访问器是迭代器. 通过使用 yield 定义迭代器,可在实现自 ...

  2. VS2010属性表的建立与灵活运用

    问题引入:在VS2010当中,进行opencv.QT等的编程时,总是需要配置很多属性还有依赖项等,为了减少每次都重复配置属性的工作量,现在可以运行属性表这个东西来简化配置.opencv也可以这样建立使 ...

  3. c语言常用数据类型转换整理

    你要发送原始数据流 还是 格式化输出? 如果是格式化 按原子说的 ,用sprintf / printf; 如果发送原始内存数据流, 可按下面发送, 发送 #define BYTE0(pointer) ...

  4. java.util.logging.Logger使用具体解释

    java.util.logging.Logger不是什么新奇东西了,1.4就有了,但是由于log4j的存在,这个logger一直沉默着,事实上在一些測试性的代码中,jdk自带的logger比log4j ...

  5. git for c#, commit本地,pushserver

    //ok private static void push() { string wkDir = @"E:\DotNet2010\单位project\Git.Client\lib2Test\ ...

  6. MyException--org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ###

    org.apache.ibatis.exceptions.PersistenceException:  ### Error building SqlSession. ### The error may ...

  7. ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...

  8. com.alibaba.fastjson.JSONException: default constructor not found. class ……

    1.json工具类 package com.hyzn.fw.util; import java.util.List; import java.util.Map; import com.alibaba. ...

  9. .Net内存溢出 System.OutOfMemoryException

    内存溢出常见的情况和处理方式: http://outofmemory.cn/c/dotNet-outOfMemoryException MSDN中关于processModel的文档 https://m ...

  10. Express 框架的安装

    从零开始用 Node.js 实现一个微博系统,功能包括路由控制.页面模板.数据库访问.用户注册.登录.用户会话等内容. Express 框架. MVC 设计模式. ejs 模板引擎 MongoDB 数 ...