建立一个新的 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 (一)序列化, 感谢原作者分享。 人生没有停靠站,自我本身永远是一个出发点。