运维开发笔记整理-使用序列化
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.案例一
1>.目录结构如下图所示
2>.各个文件代码如下所示
"""yinzhengjie_devops URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r"^",include("idcs.urls")) ]
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.conf.urls import url from .views import idc_list urlpatterns = [ url("^idcs/$",idc_list) ]
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.shortcuts import render from django.http import HttpResponse from .models import Idc from .serializers import IdcSerializer from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser def idc_list(request,*args,**kwargs): if request.method == "GET": #从数据库查询所有的数据 queryset = Idc.objects.all() #将查询的结果进行序列化操作,因为查询的结果有多条数据,因此我们需要加一个"many=True"属性,表示序列化查询出来的所有数据 serializer = IdcSerializer(queryset,many=True) #将数据转换成JSON格式的字符串 content = JSONRenderer().render(serializer.data) return HttpResponse(content,content_type="application/json") elif request.method == "POST": #解析字符串 data = JSONParser().parse(request) #将字符串进行序列化操作并判断序列化后 数据是否有效,如果有效就写入数据库! serializer = IdcSerializer(data=data) if serializer.is_valid(): serializer.save() content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") return HttpResponse("尹正杰到此一游!")
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.shortcuts import render from django.http import HttpResponse from .models import Idc from .serializers import IdcSerializer from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser def idc_list(request,*args,**kwargs): if request.method == "GET": #从数据库查询所有的数据 queryset = Idc.objects.all() #将查询的结果进行序列化操作,因为查询的结果有多条数据,因此我们需要加一个"many=True"属性,表示序列化查询出来的所有数据 serializer = IdcSerializer(queryset,many=True) #将数据转换成JSON格式的字符串 content = JSONRenderer().render(serializer.data) return HttpResponse(content,content_type="application/json") elif request.method == "POST": #解析字符串 data = JSONParser().parse(request) #将字符串进行序列化操作并判断序列化后 数据是否有效,如果有效就写入数据库! serializer = IdcSerializer(data=data) if serializer.is_valid(): serializer.save() content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") return HttpResponse("尹正杰到此一游!") def idc_detail(request,pk,*args,**kwargs): try: # 获取某个主键的ID,获取一条数据 idc = Idc.objects.get(pk=pk) except Idc.DoesNotExist: return HttpResponse(status=404) if request.method == "GET": serializer = IdcSerializer(idc) content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") elif request.method == "POST": content = JSONParser().parse(request) serializer = IdcSerializer(data=content) if serializer.is_valid(): serializer.save() content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json")
3>.web端访问
4>.服务端访问日志
二.案例二
1>.目录结构如下图所示
2>.各个文件代码如下
"""yinzhengjie_devops URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r"^",include("idcs.urls")) ]
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.conf.urls import url from .views import idc_list,idc_detail urlpatterns = [ url("^idcs/$",idc_list), #下面的?P表示需要传递一个参数,而<pk>表示是给参数P起了一个名称,后面的[0-9]+正则表示改值的取值范围。 url("^idcs/(?P<pk>[0-9]+)/$", idc_detail) ]
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.shortcuts import render from django.http import HttpResponse,JsonResponse from .models import Idc from .serializers import IdcSerializer from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser def idc_list(request,*args,**kwargs): if request.method == "GET": #从数据库查询所有的数据 queryset = Idc.objects.all() #将查询的结果进行序列化操作,因为查询的结果有多条数据,因此我们需要加一个"many=True"属性,表示序列化查询出来的所有数据 serializer = IdcSerializer(queryset,many=True) #将数据转换成JSON格式的字符串 content = JSONRenderer().render(serializer.data) return HttpResponse(content,content_type="application/json") elif request.method == "POST": #解析字符串 data = JSONParser().parse(request) #将字符串进行序列化操作并判断序列化后 数据是否有效,如果有效就写入数据库! serializer = IdcSerializer(data=data) if serializer.is_valid(): serializer.save() content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") return HttpResponse("尹正杰到此一游!") def idc_detail(request,pk,*args,**kwargs): try: # 获取某个主键的ID,获取一条数据 idc = Idc.objects.get(pk=pk) except Idc.DoesNotExist: return HttpResponse(status=404) if request.method == "GET": serializer = IdcSerializer(idc) content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") elif request.method == "POST": data = JSONParser().parse(request) serializer = IdcSerializer(data=data) if serializer.is_valid(): serializer.save() content = JSONRenderer().render(serializer.data) return HttpResponse(content, content_type="application/json") return JsonResponse(serializer.errors,status=400) elif request.method == "DELETE": idc.delete() #给前端返回空数据 return HttpResponse(status=204)
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from django.db import models class Idc(models.Model): name = models.CharField("机房名称",max_length=32) address = models.CharField("机房地址",max_length=256) phone = models.CharField("联系人",max_length=15) email = models.EmailField("邮件地址",default="null") letter = models.CharField("IDC简称",max_length=5) def __str__(self): return self.name class Meta: db_table = "resources_idc"
# !/usr/bin/env python # _*_conding:utf-8_*_ # @author :yinzhengjie # blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ from rest_framework import serializers from .models import Idc class IdcSerializer(serializers.Serializer): """ IDC序列化类 """ id = serializers.IntegerField(read_only=True) #把当前字段设置为只读属性,如果给改字段穿参数会被忽略! name = serializers.CharField(required=True,max_length=32,min_length=2) #我们要求用户必须对改字段传参数,而且传参数对长度必须在2~32个字符之间!下面字段中对属性同理! address = serializers.CharField(required=True,max_length=256) phone = serializers.CharField(required=True,max_length=15) email = serializers.EmailField(required=True) letter = serializers.CharField(required=True,max_length=5) def create(self, validated_data): return Idc.objects.create(**validated_data) def update(self, instance, validated_data): instance.name = validated_data.get("name",instance.name) instance.address = validated_data.get("address", instance.address) instance.phone = validated_data.get("phone", instance.phone) instance.email = validated_data.get("email", instance.email) instance.save() #这里这里的save方法会把数据写入到数据库中! return instance
3>.启动项目后,模拟浏览器访问服务,获取相应的数据信息
bogon:~ yinzhengjie$ http http://127.0.0.1:8000/idcs/3/ HTTP/1.0 200 OK Content-Length: 196 Content-Type: application/json Date: Thu, 28 Feb 2019 09:13:58 GMT Server: WSGIServer/0.2 CPython/3.6.6 X-Frame-Options: SAMEORIGIN { "address": "北京亦庄经济开发区荣华南路11号", "email": "yinzhengjie@mail.caiq.org.cn", "id": 3, "letter": "yz", "name": "中国检验检疫科学研究员亦庄机房", "phone": "010-53897343" } bogon:~ yinzhengjie$ bogon:~ yinzhengjie$ bogon:~ yinzhengjie$ http http://127.0.0.1:8000/idcs/2/ HTTP/1.0 200 OK Content-Length: 157 Content-Type: application/json Date: Thu, 28 Feb 2019 09:14:02 GMT Server: WSGIServer/0.2 CPython/3.6.6 X-Frame-Options: SAMEORIGIN { "address": "高碑店", "email": "jky@mail.caiq.org.cn", "id": 2, "letter": "gbd", "name": "中国检验检疫科学研究院高碑店机房", "phone": "010-53897343" } bogon:~ yinzhengjie$ bogon:~ yinzhengjie$ http http://127.0.0.1:8000/idcs/1/ HTTP/1.0 200 OK Content-Length: 196 Content-Type: application/json Date: Thu, 28 Feb 2019 09:14:06 GMT Server: WSGIServer/0.2 CPython/3.6.6 X-Frame-Options: SAMEORIGIN { "address": "北京亦庄经济开发区荣华南路11号", "email": "yinzhengjie@mail.caiq.org.cn", "id": 1, "letter": "yz", "name": "中国检验检疫科学研究员亦庄机房", "phone": "010-53897343" } bogon:~ yinzhengjie$