官方网站:

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. Java集合类框架的最佳实践有哪些

    根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList. 有些集合类允许指定初始容量.因此,如果我们能估计出存 ...

  2. jQuery遍历之同级遍历

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  3. python3 实现简单ftp服务功能(客户端)

    转载请注明出处! 可执行的命令: lspwdcd put rm get mkdir 上传下载,显示进度百分比以及平均上传下载速度 客户端 main代码: #Author by Andy #_*_ co ...

  4. Delphi 获取系统的语言环境参数GetSystemDefaultLangID、VerLanguageName、GetLocaleInfo

    1 核心的两个API函数:GetSystemDefaultLangID 和 VerLanguageName. GetSystemDefaultLangID:获得系统默认语言的ID VerLanguag ...

  5. css实现文本溢出用...显示

    文本溢出省略号显示,要实现这个必须 要有四个条件: 1.须有容器宽度:width:value 2.强制文本在一行内显示:white-space:nowrap: 3.溢出内容隐藏:overflow:hi ...

  6. UNP学习 Unix域协议

    Unix域协议并不是一个实际的协议族,它只是在同一台主机上进行客户-服务器通信时,使用与在不同主机上的客户和服务器间通信时相同的API的一种方法. 当客户和服务器在同一台主机上时,Unix域协议是这套 ...

  7. QGroundControl编译出错记录

    运行时出现错误: /home/myfly2/Downloads/qgroundcontrol/QGroundControl: error : cannot open shared object fil ...

  8. 高级运维(七):Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包

    一.Subversion基本操作 目标: 本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件: 1> 创建版本库    2> 导入初始化数据    3> 检出 ...

  9. python random模块随机取list中的某个值

    import random from random import randint ''' random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,pyth ...

  10. 6、基于highcharts实现的线性拟合,计算部分在java中实现,画的是正态概率图

    1.坐标点类 package cn.test.domain; public class Point { double x; double y; public Point(){ } public Poi ...