frontend

BrowserSync 页面自动重载工具

网站前端开发过程中,每一次修改代码,都要手动刷新浏览器才能看到页面的变化。有了 LiveReload 工具就通过程序维护一个本地的静态服务器,实现静态资源变化,浏览器自动重新刷新的功能。 Python 下面有个名为 httpwatcher 工具,直接在静态资源根目录执行 httpwatcher 就可以实现页面变更自动刷新。 刚刚又找到一个 NodeJS 环境下的实现 BrowserSync,可以和 gulp 混合使用,相比要更灵活。 安装 Linux 环境下以普通用户身份安装时通常需要 sudo,因为模块默认会存放在 /usr/lib/node_modules 目录,

  • Herald Yu
    Herald Yu
1 min read
Manjaro

小米笔记本 Air + Manjaro 18.0.4 指纹识别

暂时没找到配置指纹识别的 GUI,查到的资料基本都是介绍在终端中配置指纹的方法,好在不复杂。另外有文章说默认情况下仓库里的 fprintd 不支持小米的指纹设备,可能是最新的仓库版本已经更新,直接使用默认安装的就已经可以使用了。 启动服务 $ sudo systemctl start fprintd.service 添加指纹验证 $ sudo nano /etc/pam.d/system-local-login 在 system-login 前面添加指纹验证: auth sufficient pam_fprintd.s auth include system-login

  • Herald Yu
    Herald Yu
1 min read
Django

Django 模板 filter 实现字符转列表

用 Django 做表单时候,多选项会按 列表 格式,以字符串的形式记录在数据库: 由于需要用已记录的字段去判断是否给 input 添加 checked 属性,但直接迭代这个项会发现它是以字符串的形式被迭代的,也就是以字符为单位进行迭代,这可不是我们想要的效果。 我想要的是,让这个字段的值是以一个 list() 的形式来使用的。这时候,就需要自定义 django 模板过滤器来实现需求。 创建自定义标签文件 在应用的根目录创建 templatetags 目录,在里面创建自定义标签文件,文件名是未来 {% load file_name %} 使用的,

  • Herald Yu
    Herald Yu
1 min read
Django

Django "Cannot drop column 'page_ptr_id': needed in a foreign key

Wagtail 提供的很多功能需要通过外键实现,应用创建的多了类写的多了就免不了将某个模型中的类和其外键类一并删除或改换其他地方。如果使用 sqlite 数据库,执行迁移并没有问题。但生产环境使用 mysql/mariadb 时就会出现标题所示的错误。 django.db.utils.OperationalError: (1829, "Cannot drop column 'page_ptr_id': needed in a foreign key constraint 'home_formfield_page_id_

  • Herald Yu
    Herald Yu
1 min read
Wagtail

Django/Wagtail debug=False 出现 500 错误

生产环境肯定是要关闭 debug 的,开发环境运行的好好的,可是部署到生产环就给报一个 Error 500 内部服务器错误,debug=True 马上就能正常访问。这个问题有两个原因: 原因一 未配置允许的主机 生产环境配置文件 production.py 中有一行: ALLOWED_HOSTS = ['it.ismy.fun', '.ismy.fun'] 把站点使用的域名填进去。配置以后还是 500错误? 原因二 静态文件问题 生产环境中,Django

  • Herald Yu
    Herald Yu
1 min read
Wagtail

Wagtail/Django 使用 S3-like 对象存储

本地开发使用 django 自带的服务器,静态文件直接在项目目录中托管。一旦要往生产环境部署时,就会发现必须为前端静态文件和其他媒体文件配置一个单独的存储后端,Django 说它不管这事儿。 存储后端可以直接在服务器上配置一个静态服务器,也可以直接使用 AWS S3 之类的对象存储,这里主要记录对象存储后端的配置方法。 对于 wagtail 来说,使用对象存储并不能让网站程序完全减负,很多对图片和文档的操作需要先将文件从对象存储取回到服务器的内存中,处理好以后再返回给访问者。Anyway,对象存储可以分担带宽,总之利大于弊。 第一步 安装存储管理相关的包 使用 django-storages 管理存储后端,使用 boto3 实现 s3-like 对象存储的管理。

  • Herald Yu
    Herald Yu
2 min read
Django

Django for 循环计数

碰到一个奇葩的前端设计,下拉列表切换不同的面板,用不同的面板来对同一个单选字段下的项进行分类。比如前3项在第一个 panel,随后的2项在第二个 panel,最后3项在第三个 panel。 这样一来就需要用 for 循环对这个项进行迭代,Django 手册有介绍 {{ forloop.counter }},把它扔进 for 循环里,会帮助计数,从 1 开始,如果想从 0 开始,可以使用 {{ forloop.counter0 }}。 如下,从第8项开始渲染: {% for i

  • Herald Yu
    Herald Yu
1 min read

Subscribe to Herald's Tech Notes