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

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

    mkdir ~/env/
    

    virtualenv ~/env/tutorial source ~/env/tutorial/bin/activate

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

    pip install django
    

    pip install djangorestframework pip install pygments

  3. 创建一个 django 项目

    cd ~
    

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

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

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

    }

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

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

    )

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

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

    )

创建一个 models

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

    from django.db import models
    

    from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles

    LANGUAGE_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',)
    
  2. 接着,在数据库中生成 snippet 表

    python manage.py shell
    

建立一个 Serializer 类

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

    from django.forms import widgets
    

    from rest_framework import serializers from snippets import models

    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']
            instance.style = attrs['style']
            return instance
    
        # Create new instance
        return models.Snippet(**attrs)
    
  2. 在 Django shell 中应用 Serializers

    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='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"}'