问题:
serializer,models,等各个板块下,各种字段以及import的含义。
https://docs.djangoproject.com/en/2.0/intro/tutorial01/
http://www.django-rest-framework.org
Django rest framework优势:
- 是构建web APIs强大灵活的工具包
- 在线可视化的API
- 验证策略涵盖OAuthla 和 OAuth2
- 同时支持ORM和非ORM数据源的序列化(ORM:对象关系映射)
- 可配置各个环节,基于类function-based的视图views即可
- 大量文档和社区支持
- 大公司也是其拥护者
介绍
- serialization
1.在隔离环境中简历新包,安装Django,rest framework pygments(用来提亮代码)。
2.创建新项目:
django-admin.py startproject tutorial
#创建名字为tutorial的项目
3.创建新app,在此建立一个简单的web api
python manage.py startapp snippets
#创建名叫snippets的web API
4.在tutorial项目中的settings.py中加上snippets rest_framework to INSTALLED_APPS
INSTALLED_APPS = (
...
'rest_framework',
'snippets.apps.SnippetsConfig',
)
5.创建模型
创建模型在储存代码片段
但是models下的各种模块需要在了解一下
例如,models.DateTimeField,models.CharField,models.TextField,
将模型同步到数据库,实现初始迁移:migration
6.创建序列器 serializer(不太懂)
借助声明序列器,实现类似于Django表单form的转化,提供序列化与反序列化的途径。
在snippets(app)中,创建serialized.py
from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
#类的第一部分,告诉REST框架,哪些字段(field),需要被序列化/反序列化。
class SnippetSerializer(serializers.Serializer):
pk = serializers.IntegerField(read_only=True)
title = serializers.CharField(required=False, allow_blank=True, max_length=100)
code = serializers.CharField(style={'base_template': 'textarea.html'})
linenos = serializers.BooleanField(required=False)
language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')
def create(self, validated_data):
"""
传入验证过的数据, 创建并返回`Snippet`实例。
"""
return Snippet.objects.create(**validated_data)
def update(self, instance, validated_data):
"""
传入验证过的数据, 更新并返回已有的`Snippet`实例。
"""
instance.title = validated_data.get('title', instance.title)
instance.code = validated_data.get('code', instance.code)
instance.linenos = validated_data.get('linenos', instance.linenos)
instance.language = validated_data.get('language', instance.language)
instance.style = validated_data.get('style', instance.style)
instance.save()
return instance
一个有内容的实例对象。这两个方法会在运行 serializer.save() 时,被调用——啥意思?
7.让序列器运行起来
python manage.py shell
8.模拟序列器
会比普通的序列器代码简洁。
- 请求和响应
1.请求对象:request
2.响应对象:response
它携带着纯粹的内容,通过内容协商(Content Negotiation)来决定,将以何种形式,返回给客户端。
3.状态码status:让代码使用标识符而更加清晰。
- 包装API视图(wrapping API views)
REST framework提供了两种编写API view的封装。
使用 @api_view 装饰器,基于方法的视图
继承 APIView 类,基于类的视图