博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的Django REST框架中的序列化及请求和返回
阅读量:4885 次
发布时间:2019-06-11

本文共 2750 字,大约阅读时间需要 9 分钟。

序列化Serialization

1. 设置一个新的环境
在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使我们的配置和我们的其他项目配置彻底分开。   

现在我们处在一个虚拟的环境中,开始安装我们的依赖包
    
$pip install django
 
$pip install djangorestframework
 
$pip install pygments  使用这个包,做代码高亮显示
需要退出虚拟环境时,运行deactivate。更多信息,irtualenv document
2. 开始
环境准备好只好,我们开始创建我们的项目
    
$ cd ~
 
$ django-admin.py startproject tutorial
 
$ cd tutorial
项目创建好后,我们再创建一个简单的app    
$python manage.py startapp snippets
我们使用sqlite3来运行我们的项目tutorial,编辑tutorial/settings.py, 将数据库的默认引擎engine改为sqlite3, 数据库的名字NAME改为tmp.db
    
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': 'tmp.db',
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': '',
  }
}
同时更改settings.py文件中的INSTALLD_APPS,添加我们的APP snippets和rest_framework
    
INSTALLED_APPS = (
  ...
  'rest_framework',
  'snippets',
)
在tutorial/urls.py中,将snippets app的url包含进来    
urlpatterns = patterns('',
  url(r'^', include('snippets.urls')),
)
3. 创建Model
这里我们创建一个简单的nippets model,目的是用来存储代码片段。    
from django.db import models
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles
 
LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())
 
class Snippet(models.Model):
  created = models.DateTimeField(auto_now_add=True)
  title = models.CharField(max_length=100, default='')
  code = models.TextField()
  linenos = models.BooleanField(default=False)
  language = models.CharField(choices=LANGUAGE_CHOICES,
                default='python',
                max_length=100)
  style = models.CharField(choices=STYLE_CHOICES,
               default='friendly',
               max_length=100)
 
  class Meta:
    ordering = ('created',)
完成model时,记得sync下数据库    
python manage.py syncdb
4. 创建序列化类
我们要使用我们的web api,要做的第一件事就是序列化和反序列化, 以便snippets实例能转换为可表述的内容,例如json. 我们声明一个可有效工作的串行器serializer。在snippets目录下面,该串行器与django 的表单形式很类似。创建一个serializers.py ,并将下面内容拷贝到文件中。    
from django.forms import widgets
from rest_framework import serializers
from snippets.models import Snippet
 
class SnippetSerializer(serializers.Serializer):
  pk = serializers.Field() # Note: `Field` is an untyped read-only field.
  title = serializers.CharField(required=False,
                 max_length=100)
  code = serializers.CharField(widget=widgets.Textarea,
                 max_length=100000)
  linenos = serializers.BooleanField(required=False)
  language = serializers.ChoiceField(choices=models.LANGUAGE_CHOICES,
                    default='python')
  style = serializers.ChoiceField(choices=models.STYLE_CHOICES,
                  default='friendly')
 
  def restore_object(self, attrs, instance=None):
    """
    Create or update a new snippet instance.
    """
    if instance:
      # Update existing instance
      instance.title = attrs['title']
      instance.code = attrs['code']
      instance.linenos = attrs['linenos']
      instance.language = attrs['language']
     

转载于:https://www.cnblogs.com/amengduo/p/9586883.html

你可能感兴趣的文章
SQL演练
查看>>
React Antd中样式的修改
查看>>
Spring 应用外部属性文件 配置 context 错误
查看>>
导入lxml找不到etree,报ImportError:DLL load failed:找不到指定的程序
查看>>
面向对象一
查看>>
大象的崛起!Hadoop七年发展风雨录
查看>>
图片二值化
查看>>
数据库常用函数
查看>>
集合之TreeSet(含JDK1.8源码分析)
查看>>
C语言学习的记忆
查看>>
Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 ...
查看>>
node-sass 报错的解决方法
查看>>
Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
查看>>
免费下载知网文献的方法 | sci-hub免费下载SCI论文方法
查看>>
测试用例,变量之间,相互调用的方法,和修改原来初始化变量的方法
查看>>
ASP.NET MVC中将控制器分离到类库的实现(转)
查看>>
Poj 2304 Combination Lock(模拟顺、逆时钟开组合锁)
查看>>
Palindrome Number
查看>>
H5上传功能
查看>>
PHP命名空间(Namespace)的使用详解
查看>>