一直想做一个显示音频频谱的界面,终于入门了。
MDN 上有详细的接口文档,详细可以参阅, 但这篇文章只是介绍将音频显示频谱。
Idea的文件模板
JetBrains 家的软件太好用了。
python中的函数传参
python 中的函数参数既不是值传递也不是引用传递,是一种叫做 共享传参的方式。
django + celery + channels部署
最近尝试已一些库和框架,将平常自己写的功能整合到一起。
整体结构如下图:
橙色框是主要配置点
uwsgi 服务器的配置大都熟悉,
Celery介绍(一)
celery 是一个用来处理大量消息的分布式系统,在系统内可以实时处理任务,还支持任务调度,本质是一个分布式任务队列。 ### 简易执行流程
在 celery 中有 3 个基本概念:task
worker
application
application
就是我们的项目,里面包含了定义好的task
,这些task
和我们定义的 app 相关联,而worker
是执行application
的单元,通过命令行来启动,形如celery -A [application] worker
,只需指定 application,它就会执行 我们定义的任务。可以开启多个worker
。也可将代码复制到多台机器上,开启多个worker
,实现分布式。
认证与授权
背景
Authentication
:身份认证,指的是对用户的身份进行验证,例如 tom 有 tom 的身份,jack 有 jack 的身份,应用程序
需要他们各自的 用户名 和 密码 来确认。
Authorization
:权限,授权,这是在身份验证之后获得的权限,例如 tom 是 管理员,他就可以编辑文章,而 jack 只是
普通用户,只能阅读文章。
由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,
应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。
目前主流的用户认证方法有基于token和基于session两种方式。
认证系统
用户模型
认证包括 验证 和 授权
这些操作都是围绕着 用户表 的操作,因此第一步是先确定 用户表
默认的用户表一般满足不了实际的需求,这时我们可以
- 扩展,利用 一对一 关联 User 模型。
- 取代 User 表,User 表是继承自 AbstractUser,我们也可以直接继承来自定义我们的表字段,不过别忘记在设置里定义
- 完全自定义,AbstractUser 继承自 AbstractBaseUser 和 PermissionsMixin,而他们又都继承自 models.Model。 因此我们完全可以直接自定义我们自己的 用户表,不过这样会增加很多工作量。具体可参考 官方的源码。