0
点赞
收藏
分享

微信扫一扫

Django+Drf+drf-yasg 学习笔记

登高且赋 2022-03-17 阅读 93

Django+Drf+drf-yasg 学习笔记

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

模型层(models)

作用: 构建和操纵 web 应用的数据

特点:由于 Django 的 orm 即对象关系映射模式,每一个模型映射一张数据库表

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model

  • 模型类的每个属性都相当于一个数据库的字段

  • Q: model_name.objects.get()model_name.objects.filter() 有什么区别

    • A: get 可以理解为精准匹配,通常返回值是一个定义的model对象,只有一条记录返回的时候才正常,也就说明get的查询字段必须是主键或者唯一约束的字段。当返回多条记录或者是没有找到记录的时候都会抛出异常。
    • filter返回 QuerySet 对象列表,有没有匹配的记录都可以。

字段关联关系

TODO

drf serializers

serializers 主要是对 Model 对象的操作,包括序列化(将 Python 数据类型转换为 json)和反序列化

  • 继承于 serializers.ModelSerializer
  • ModelSerializer 的父类是Serializer,是 在Serializer的基础上的扩展
  • 可以直接通过 Class Meta 里配置 fields 来对 model 进行序列化,简化了 Serializer 的操作
  • Meta里可以配置如下配置:
    • model:指定需要序列化的model
    • depth:序列化时,读取数据的深度,默认是0,0表示仅展示该model对象的值,1表示为展示与该model对象直接外键关联的对象的相关数据,以此类推
    • fields:需要序列化的字段,是一个元组,“all”,表示所有字段
    • exclude:不需要序列化的字段,默认是在全字段的情况下剔除不需要序列化的字段,
      • 注意:fields和exclude不能同时使用
    • extra_kwargs:给fields中的字段,添加额外的属性,如只读(read_only)、只写(write_only)等
    • read_only_fields:只读字段
    • validators:
      在显示指定序列化字段时,可以通过source='xxx’来指定需要关联的外键对象的值,通过点分式获取对应的字段。

drf-yasg swagger_serializer_method

可以用这个装饰器来装饰一个序列化字段标识它从哪里取值,通常用于一些外键或者嵌套字段的取值。

视图层(views)- 相当于 controller 层,负责处理用户的请求并返回响应

视图有基于函数的视图,有基于类的视图,一般使用 drf 之后,我们会继承 ModelViewSet 来创建基于类的视图:

  • 继承自各个 mixin 类和 GenericViewSet,所以默认就提供了增删查改相关方法,具体在代码中点击进入看就会发现

路由

关于 URL:

  • Django 规定每一个模式要求 URL 以一个斜线结尾
  • urlpatterns 都可以 include 其他 URLconf 模块,即将一部分 URL 放置于其他 URL 下面
  • URL 模式可以使用正则表达式,使用 re_path() 而不是 path()

而对于 drf:常用路由是 DefaultRouter

  • drf 添加了对自动 URL 路由到 Django 的支持,提供了一种简单、快速和一致的方式将试图逻辑连接到一组 URL
  • 常用的是 DefaultRouter,默认会不全常见的 CRUD 接口
  • 自动基于 viewSet 生成 xxx-list 以及 xxx-detail,自定义的接口,默认将 “_” 替换成 “-”

管理

  1. step1: 从 根 URLConf 中创建 admin 路由
  2. step2: python manage.py createsuperuser 创建管理员账号
  3. step3: 继承 ModelAdmin 用来处理自定义界面
  4. 其他处理主题的方式可以参考 https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/#hooking-adminsite-to-urlconf

管理静态文件

  1. 配置静态文件,定义 STATIC_URL STATIC_ROOT
  2. 配置 whiternoise 提供静态文件服务(可以不依赖像 nginx 这样的 external service)
  3. python manage.py collectstatic
举报

相关推荐

0 条评论