官方网站:

https://www.django-rest-framework.org/

翻译网站:
https://q1mi.github.io/Django-REST-framework-documentation/

RESTful 在Django框架中实现的插件:rest_framework

在Django框架中RESTful主要表现在序列化的实现、视图函数的实现和urls路由的实现,在这里我们可能会完全推翻Django基础知识中实现代码的方式。

1. 安装:

pip install djangorestframework

2. 在Django中的配置:

  1. settings.py中INSTALLED_APPS添加['rest-framework',]

  2.在应用中创建Serializers.py

3.Serializers中三个基础的序列化类:

  • serializers.HyperLinkedModelSerializer:序列化模型,并添加超链接
  • serializers.Serializer:手动添加序列化
  • serializers.ModelSerializer:自动序列化,只需要把模型导入,属性many=True 表示可序列化多个模型

3.1 。serializers.HyperLinkedModelSerializer:

# models.py
from django.db import models class Books(models.Model):
b_name = models.CharField(max_length=30)
b_price = models.FloatField(default=1) def to_dict(self):
return {'id':self.id, 'b_name':self.b_name, 'b_price':self.b_price}

models.py

# urls.py
from django.urls import include, path
from rest_framework import routers from REST import views router = routers.DefaultRouter()
router.register(r'Books', views.BookViewSet) urlpatterns = [
path('', include(router.urls)),
]

urls.py

from django.shortcuts import render

# Create your views here.
from rest_framework import viewsets from REST.models import Books
from REST.serializers import BookSerializer class BookViewSet(viewsets.ModelViewSet):
queryset = Books.objects.all()
serializer_class = BookSerializer

views.py

# serializers.py
from rest_framework import serializers from REST.models import Books class BookSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Books
fields = ('url', 'b_name','b_price')

serializers.py

models.py : 建立模型

urls.py :建立路由

views.py :建立序列化类视图

serializers.py :序列化

3.2 。serializers.Serializer

class Person(models.Model):
p_name = models.CharField(max_length=32)
p_age = models.IntegerField(default=1)
p_sex = models.BooleanField(default=False) class Meta:
db_table = 'Person'

models.py

from django.urls import  path
from REST import views urlpatterns = [
path('person', views.PersonView.as_view()),
]

urls.py

class PersonView(View):
def post(self,request):
p_name = request.POST.get('p_name')
p_age = request.POST.get('p_age')
print('*********',p_name) person = Person()
person.p_name = p_name
person.p_age = p_age
print('***##***', p_name)
person.save() person_serializer = PersonSerializer(person)
return JsonResponse(person_serializer.data)

views.py

class PersonSerializer(serializers.Serializer):
# 和模型中的字段对应
id = serializers.IntegerField(read_only=True) # 表示只读
p_name = serializers.CharField(max_length=32)
p_age = serializers.IntegerField(default=1)
p_sex = serializers.BooleanField(default=False) # 进行对象的创建
def create(self,validated_data):
return Person.objects.create(**validated_data) # 对象的更新
def update(self, instance, validated_data):
# 分别拿到对象,并对对象进行更新
instance.p_name = validated_data.get('p_name',instance.p_name)
print('@@@@@@')
instance.p_age = validated_data.get('p_age', instance.p_age)
instance.p_sex = validated_data.get('p_sex', instance.p_sex)
instance.save() return instance

serializers.py

3.3 。serializers.ModelSerializer

class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Students
fields = ('s_name', 's_age')

serializers.py

(省略了models.py,urls.py,views.py,和serializers.Serializer类似)ModelSerializer简单,常用!!!

初撩Django-RESTful-rest_framework序列化(将模型序列化为JSON)的更多相关文章

  1. @JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化

    @JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化 https://www.cnblogs.com/sup ...

  2. 【Django】rest_framework 序列化自定义替换返回值

    # 序列化设置 class PagerSerialiser(serializers.ModelSerializer): name = serializers.CharField(source=&quo ...

  3. django restful framework 一对多方向更新数据库

    目录 django restful framework 序列化 一 . 数据模型: models 二. 序列化: serializers 三, 视图: views 四, 路由: urls 五. 测试 ...

  4. 在django restful framework中设置django model的property

    众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...

  5. django 3.1 序列化讲述

    序列化Django对象¶ Django的序列化框架提供了一种将Django模型"翻译"为其他格式的机制.通常,这些其他格式将基于文本,并用于通过电线发送Django数据,但是序列化 ...

  6. python 序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  7. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  8. python序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  9. 超高性能的json序列化之MVC中使用Json.Net

    先不废话,直接上代码 Asp.net MVC自带Json序列化 /// <summary> /// 加载组件列表 /// </summary> /// <param na ...

随机推荐

  1. python 循环中使用多个subplot画子图像(python matplotlib use more than one subplot in loop)

    在循环语句中画出多个subplot图像代码如下 http://jonathansoma.com/lede/data-studio/classes/small-multiples/long-explan ...

  2. interrupt和interrupted和isInterrupted的区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11413917.html interrupt Code Demo package org.fool.th ...

  3. Cloudera Hadoop启用Kerberos认证

    一.Kerberos 二.安装 node01服务器安装Kerberos的核心服务master KDC,node02和node03安装Kerberos client cm也安装在node01上了 1.m ...

  4. djangorestframework-jwt产生对方token

    第一步是 通过jwt组件获得当前用户的token 第二步是 进行加密规则  需要用到base64模块进行加密 第三步 进行解密 按照规定的header payload signature 这种方式解密 ...

  5. 过滤字符串中的html标签

    C#中,我们有时需要过滤掉字符串中的部分html标签,以下是一些简单的html标签过滤方法,使用的主要方式是正则表达式 public static string ClearHtml(string ht ...

  6. Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo dp+矩阵快速幂

    E. Okabe and El Psy Kongroo   Okabe likes to take walks but knows that spies from the Organization c ...

  7. 洛谷P2015 二叉苹果树(树状dp)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

  8. 【Flutter学习】可滚动组件之SingleChildScrollView

    一,概述 SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子Widget.定义如下: 二,构造函数 const SingleChildScroll ...

  9. throw throws 区别

    throw是语句抛出一个异常.语法:throw (异常对象);         throw e; throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常)语法:[(修饰符)] ...

  10. Nodejs-交互式版本管理

    n - npm:Interactively Manage Your Node.js Versions