django RESTful研究一第一个测试例子

一.新建立工程和app

django-admin.py startproject tutorial
cd tutorial
python manage.py startapp snippets

二.配置数据库

DATABASES ={‘default‘:{‘ENGINE‘:‘django.db.backends.sqlite3‘,‘NAME‘:‘tmp.db‘,‘USER‘:‘‘,‘PASSWORD‘:‘‘,‘HOST‘:‘‘,‘PORT‘:‘‘,}}

三.配置settings.py,将新建的app添加进来

INSTALLED_APPS =(...‘rest_framework‘,‘snippets‘,)

四.配置URL

urlpatterns = patterns(‘‘,
    url(r‘^‘, include(‘snippets.urls‘)),)

五.创建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, blank=True, 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)
  classMeta:
        ordering =(‘created‘,)

注意rest3.0 和 2.0版本的不一样,比如widget要用style来表示。Field要用ReadOnlyField来表示

然后同步数据库

python manage.py syncdb

七.建立一个序列化Serializer的类

我们需要为 Web API 提供序列化和逆序列化方法,用像 json 这样的数据格式来表现 snippet
数据模型。我们可以像Django的表单类那样来声明序列化器类。在 app snippets 目录下建立一个名为 serializers.py
的文件,在该文件中键入:

from django.forms import widgets
from rest_framework import serializers
from snippets.models importSnippet, LANGUAGE_CHOICES, STYLE_CHOICES

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=LANGUAGE_CHOICES,
                                       default=‘python‘)
    style = serializers.ChoiceField(choices=STYLE_CHOICES,
                                    default=‘friendly‘)

  def restore_object(self, attrs, instance=None):

    """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.
     创建或者更新一个新的 snippet 实例,需要一个字典,该字典包含逆序列化域的值。

        Note that if we don‘t define this method, then deserializing
        data will simply return a dictionary of items.
     如果我们没有定义改方法,纳秒逆序列化数据只会简单地返回一个项目字典
        """

    if instance:# Update existing instance
            instance.title = attrs.get(‘title‘, instance.title)
            instance.code = attrs.get(‘code‘, instance.code)
            instance.linenos = attrs.get(‘linenos‘, instance.linenos)
            instance.language = attrs.get(‘language‘, instance.language)
            instance.style = attrs.get(‘style‘, instance.style)

        return instance

        # Create new instancereturnSnippet(**attrs)
        return Snippet(**attrs)

关于序列化类的理解:

该序列化器类的第一部分定义了需要序列化和逆序列化的域。restore_object方法定义了怎样用逆序列化的数据来创建一个新的实例。

注意:我们同样可以使用其他更多的用在表单中的属性,像 widget(3.0用style)=weidgets.Textarea。这些属性可以用来控制序列化器渲染一个 HTML 表单的行为,尤其对显示可浏览的 API 有用,这个我们会在后面的教程中看到。

我们可以用ModelSerializer类来快速生成,但是现在我们会显示地定义序列化器。

八.查看序列化是如何工作的

python manage.py shell
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser

snippet =Snippet(code=‘foo = "bar"\n‘)
snippet.save()

snippet =Snippet(code=‘print "hello, world"\n‘)
snippet.save()

上面创建一个snippets实例

获取snippets实例,查看序列化的效果:

serializer =SnippetSerializer(snippet)
serializer.data# {‘pk‘: 2, ‘title‘: u‘‘, ‘code‘: u‘print "hello, world"\n‘, ‘linenos‘: False, ‘language‘: u‘python‘, ‘style‘: u‘friendly‘}

上面我们将 模型的实例转换成Python数据类型。我们用序列化器将其渲染成  json:

content =JSONRenderer().render(serializer.data)
content# ‘{"pk": 2, "title": "", "code": "print \\"hello, world\\"\\n", "linenos": false, "language": "python", "style": "friendly"}‘

九.逆序列化

逆序列化是类似的,首先我们解析数据流,将其转成Python数据类型。

==JSONParser().parse(stream)

然后存储Python数据类型到对象实例中去。

serializer =SnippetSerializer(data=data)
serializer.is_valid()
# Trueserializer.object
# <Snippet: Snippet object>

注意这些API和django表单的相似处。这些相似点, 在我们讲述在view中使用serializers时将更加明显。

我么也可以序列化 querysets,只需要简单的加上 many = True。

serializer =SnippetSerializer(Snippet.objects.all(), many=True)
serializer.data# [{‘pk‘: 1, ‘title‘: u‘‘, ‘code‘: u‘foo = "bar"\n‘, ‘linenos‘: False, ‘language‘: u‘python‘, ‘style‘: u‘friendly‘}, {‘pk‘: 2, ‘title‘: u‘‘, ‘code‘: u‘print "hello, world"\n‘, ‘linenos‘: False, ‘language‘: u‘python‘, ‘style‘: u‘friendly‘}]
时间: 2024-08-23 05:58:39

django RESTful研究一第一个测试例子的相关文章

django RESTful研究一第一个测试例子(用序列化器编写原生的Django视图函数)

让我们看看通过 Serializer 类怎样来编写 API 的视图函数,现在我们不会使用 REST 框架中的特性,仅仅写原生的Django视图函数. 一.我们创建一个 HttpResponse 的子类,用来将任何数据转换成 JSON格式. 编辑snippets/views.py,如下: from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framew

django RESTful研究一第一个测试例子(ModelSerializers)

前一篇介绍了serializer,但是SnipperSerializer 类有很多在Snippet 模型中的重复信息,如果我们能够去掉重复代码就相当不错,类似与django提供Form类和ModelForm类,Rest Framework也包含了Serializer 类和 ModelSerializer类. 一.使用ModelSerializer类重构后的序列化器,编辑snippets/serializers.py如下 ==(,,,,,)

django RESTful研究一环境搭建和理解RESTful

一.环境安装要求: django1.8 python2.7 restful3.2(一定要注意版本,版本不一致会报很多错误,特别是django1.8是在python2.7的基础上才能够运用) 二.环境搭建: pip install djangorestframework pip install markdown       # Markdown support for the browsable API. pip install django-filter 三.理解RESTful: 请参考(htt

为初学者写三层,三层的搭建和测试例子

三层搭建过程   第一步打开vs,然后点击新建—---项目—----其它项目类型-------空白解决方案.如下图! (备注右上角是你建立的版本是3.5 的还是2.0的,这里选择的是3.5的) 注意1:名称可以重命名,这个地方我命名的是Test_Example. 注意2:存放位置自己选择一个新路径,便于以后的查找.   然后点击确认按钮提交: 这样出现一个下图的空白解决方案.   第二步:我们建立一个数据访问层:首先如上图中选中空白解决方案,然后右键----添加-----  然后选择新建项目--

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

目录 django restful framework 序列化 一 . 数据模型: models 二. 序列化: serializers 三, 视图: views 四, 路由: urls 五. 测试 : test django restful framework 序列化 案例: 一个网域domain可以绑定多台服务器主机assets, 但是一台服务器只能绑定一个网域. 数据模型之间关系适用于一对多. 一 . 数据模型: models 定义 assets 模型:apps/assets/models

MockMVC - 基于RESTful风格的SpringMVC的测试

MockMVC - 基于RESTful风格的SpringMVC的测试 对于前后端分离的项目而言,无法直接从前端静态代码中测试接口的正确性,因此可以通过MockMVC来模拟HTTP请求.基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. package test.example.controller; import com.DemoApplication; import com.example.enti

按照鬼哥学so变化,四,第一章的例子

跟随鬼哥伦比亚科学so变化,四.第一章的例子 图纸/文化  听鬼哥说故事 ---------------------------------------------切割线-------------------------------------------- 这篇文章是前段时间的文章,近期这个系列的so分析刚好能够做为一个实例教程.所以就补充拿回来了. 前三篇没看的.请继续关注博客,看完前面三篇. 趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充·····················

JavaFX 二 First Blood(第一个小例子,拿起武器冲啊~)

万万没想到,上次写的JavaFX 一,回应那么激烈,令我有点小激动啊,这里感谢各位这么热心,大家的支持就是我最大的动力,让我们共同进步,共同学习.话题回归,今天我想给大家讲讲JavaFX的第一个小例子,顺便通过例子,给大家讲讲一些关于JavaFX的代码编写的一些心得体会.不多废话,好戏即将开始...... 上次说到新手开发是先Fxml,再写代码,我们先来看看如何用JavaFX Scene Builder 2.0设计我们想要的界面,首先,我介绍下工具界面的一些小知识, 首先我们认识下这个FX的可视

thrift windows vs2013测试例子

首先需要编译thrift的compiler 源代码目录在: \thrift-master\compiler\cpp 原来是vs2010的功能,用vs2013打开之后会提示升级,因为这只是一个工具,所以不需要升级,直接编译得到需要的exe 编译之后得到一个thrift.exe,这个工具可以把中间代码生成对应的目标代码 生成需要的测试代码 在thrift.exe的目录中新建一个记事本,粘贴如下内容保存,之后把文件名改成student.thrift: <span style="font-size