Django Rest FrameWork (一)序列化

建立一个新的 Django 开发环境:

    使用 virtualenv 创建一个新的虚拟环境。

    mkdir ~/env/virtualenv ~/env/tutorialsource ~/env/tutorial/bin/activate

    接着,在虚拟环境内部安装我们所需要的包

    pip install djangopip install djangorestframeworkpip install pygments

    创建一个 django 项目

    cd ~ django-admin.py startproject tutorialcd tutorialpython manage.py startapp tutorila

    为了方便这里使用 sqlite3 作为数据库,并且编辑 tutorial/setting.py 文件。

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

    同时,我们需要将 snippets app 和 rest_framewokr app 加载到 INSTALLED_APPS。

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

    需要在 项目根目录下的 urls.py 增加如下配置:

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

创建一个 models

    创建一个简单的 Snippet model. 修改 snippets 目录下 models.py 文件

    from django.db import modelsfrom pygments.lexers import get_all_lexersfrom pygments.styles import get_all_stylesLANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in get_all_lexers()])STYLE_CHOICES = sorted((item, item) for item in list(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',)

    接着,在数据库中生成 snippet 表

    python manage.py shell

建立一个 Serializer 类

    在 snippet 文件夹中创建一个 serializers.py 文件并且添加如下代码:

    from django.forms import widgetsfrom rest_framework import serializersfrom snippets import modelsclass 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']            instance.style = attrs['style']            return instance        # Create new instance        return models.Snippet(**attrs)

    在 Django shell 中应用 Serializers

    python manage.py shell

    导入所需要的包

    from snippets.models import Snippetfrom snippets.serializers import SnippetSerializerfrom rest_framework.renderers import JSONRendererfrom rest_framework.parsers import JSONParsersnippet = Snippet(code='print "hello, world"\n')snippet.save()

    将数据序列化成一个实例

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

    最后将实例转换成 json 格式

    content = JSONRenderer().render(serializer.data)content# '{"pk": 1, "title": "", "code": "print \\"hello, world\\"\\n", "linenos": false, "language": "python", "style": "friendly"}'
Django Rest FrameWork (一)序列化

相关文章:

你感兴趣的文章:

标签云: