8:30 django restful
参考:https://zhuanlan.zhihu.com/p/32126430
from django.conf import settings
:
‘settings 是 django 的配置文件钩子,你可以在项目的任何地方引入它,可以通过 . 路径符来访问项目的配置。比如 settings.ROOT_URLCONF
就会返回根 url 配置。关于钩子,我需要多说两句。讲道理,如果需要引用项目配置,标准的写法难道不应该是 import project.settings as settings
吗,这样才能连接到项目的配置啊,为什么我只是引入 django 自己的配置就可以了呢。这就是 django 的神奇之处了,在一切都还没有运行之前,django 首先做的就是加载配置文件,并且把 settings 对象的属性连接到各个配置上。注意,settings 是个对象,所以像 from django.conf.settings import DEBUG 之类的语法是错误的。因为它不是个模块。所以在访问配置时,只能以 settings.<key> 的形式来调用配置。’
可以通过断点调试来进入黑盒内部。
使用Rest以json
类型前后端交换数据,避免了因为数据变动导致后端渲染模板的性能浪费,view层交给前端js自行渲染
中间件是 django 很重要的一部分,它在请求和响应之间充当预处理器的角色。 很多通用的逻辑可以放到这里,django 会自动的调用他们。 中间件只是视图函数的公共部分。你把中间件的核心处理逻辑复制粘贴到视图函数中也是能够正常运行的。
10:00 我吐了,django-rest-framework的官网例子还真的有错
使用
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
而不是官网quikstart里面的
具体参考:https://www.django.cn/course/show-20.html
序列化
们该如何把模型数据转换为 json 数据呢? 把其它数据按照一定的格式保存下来,这个过程我们称为“序列化”。“序列化”这个词其实很形象,它把一系列的数据,按照一定的方式给整整齐齐的排列好,保存下来,以便他用。在 Django 中,Django 为我们提供了一些简单的序列化工具,我们可以使用这些工具来把模型的内容转换为 json 格式。
其中很重要的工具便是 serializers 了,看名字我们就这到它是用来干什么的。其核心函数serialize(format, queryset[,fields])
就是用于把模型查询集转换为 json 字符串。它接收的三个参数分别为 format,format 也就是序列化形式,如果我们需要 json 形式的,我们就把 format 赋值为 'json' 。 第二个参数为查询集或者是一个含有模型实例的可迭代对象,也就是说,这个参数只能接收类似于列表的数据结构。fields 是一个可选参数,他的作用就和 Django 表单中的 fields 一样,是用来控制哪些字段需要被序列化
同时它也提供了对数据的验证功能,更棒的是,这个数据验证是双向的。也就是说,它既可以验证前端上传到后端的数据,它也可以验证后端传到前端的数据。前者比较好理解,那后者怎么理解呢?比如,我们前端需要的 created_time字段的日期的格式为 '月-日-年' ,那么我们就可以在序列化器中写好,提前做好格式转换的工作,把验证通过数据传给前端。所以,我们序列化器的处理流程大概是这样的:
client ----> views <-----> serializer <-----> model
以及,序列化器还可以规定前端可以修改哪些字段,前端可以知道哪些字段。我们只希望客户端修改 name 和 code 两个字段,有的人可能会偷偷上传 created_time 字段,要是我们没有对它做拦截,我们的字段就会被随意修改啦,这样可不太好。
序列化器把不符合要求的字段的错误信息给放在了 .errors 属性里。我们可以通过这个属性来查看相应的错误信息
read_only_fields 选项里,这样,当序列化器在序列化前端的字段时,即便是前端有这些字段,序列化器也会忽略这些字段,这样就可以防止别有用心的人暴力修改我们的字段。
Maxin
- 每个Maxin只能完成一个功能
- 每个Maxin只操作自己自己知道的属性
Maxin是为了代码复用和解耦,要合理的选择那一部分抽象出来成为Maxin