References:
Django drf 教程
Django 项目启动:
# 创建环境
python -m venv venv
# 安装依赖
pip install -r requirement.txt
# 检测模型文件修改(初次启动的时候可以直接 migrate)
python manage.py makemigrations app_name
# 创建新定义的模型的数据表
python manage.py migrate
# 收集静态文件至 STATIC_ROOT 中
python manage.py collectstatic --noinput
# 启动服务
python manage.py runserver
作用: 构建和操纵 web 应用的数据
特点:由于 Django 的 orm 即对象关系映射模式,每一个模型映射一张数据库表
每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
模型类的每个属性都相当于一个数据库的字段
Q: model_name.objects.get()
和 model_name.objects.filter()
有什么区别
TODO
serializers 主要是对 Model 对象的操作,包括序列化(将 Python 数据类型转换为 json)和反序列化
__all__
表示所有字段备注:
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
...
SerializerMethodField
通过在类上添加一个方法获取其值,添加任意类型的数据到对象的序列化表示上。同时结合 drf-yasg @swagger_serializer_method 可以用这个装饰器来装饰 serializers.SerializerMethodField 来提示 swagger 如何描述这个字段
from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
days_since_joined = serializers.SerializerMethodField()
class Meta:
model = User
@swagger_serializer_method(serializer_or_field=serializers.IntegerField)
def get_days_since_joined(self, obj):
return (now() - obj.date_joined).days
视图有基于函数的视图,有基于类的视图,一般使用 drf 之后,我们会继承 ModelViewSet 来创建基于类的视图:
关于 URL:
而对于 drf:常用路由是 DefaultRouter
这是 Django 最强大的部分之一,它从你的模型中读取元数据,提供一个快速的、以模型为中心的界面,受信任的用户可以管理你网站的内容(或者说元数据)。