Python

A collection of 60 posts

Python

Python subprocess 模块

subprocess 模块用来产生新的进程并连接到它的 input/output/error 管道,获得它的返回代码。这个模块被用来替代旧的模块和功能: os.system os.spawn* 使用 subprocess 模块 建议使用 run() 方法调用 subprocess 可以处理的所有用例。对于其他高级用例,可以直接使用 下划线管道接口。 subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=

Wagtail

Wagtail 使用 s3 存储不显示 icon

Wagtail 使用 S3 作为存储后端时,管理界面的 icon 图标不能正常显示。 这是因为 wagtail 使用了网络图标字体,而对象存储不允许从远端读取字体导致的。 解决方法一 在项目配置文件中找到 S3 存储的配置信息,添加以下配置后再重新执行 ./manage.py collectstatic。 AWS_HEADERS = { 'Access-Control-Allow-Origin': '*' } 这个方法是为每个上传到 S3 的对象设置一个专门的头记录,允许这个文件实现跨域访问。 解决方法二 这种方法是在平台上直接设置 CORS,不需要重新上传文件,立即生效,推荐。 对应的纯文本配置: <CORSConfiguration> <CORSRule> <AllowedOrigin>

Django

Django 为模型提供初始化数据

有些数据表需要硬编码数据,Django 既可以用 migration 实现,也可以用 fixtures 实现。感觉后者更方便些,只要准备一个符合格式的结构化文件即可 json、yaml 或 xml 几种常用格式都可以。 使用 dumpdata 导出 如果数据库已经写好了数据,可以用 python manage.py dumpdata 命令将其导出。 手写 fixture 文件 在项目应用中新建 fixtures 目录,创建 fixture 文件内容如下: 以 JSON 格式举例 [ { "model": "myapp.person"

Django

Django 的开发与生产环境管理

Django 通过读取 DJANGO_SETTINGS_MODULE 环境变量识别配置文件,在项目文件夹创建诸如 production_settings.py 的配置文件,在运行发开服务器时设置环境变量就可以了。 方式一:直接指定环境变量 $ python manage.py runserver --settings=PROJECT_NAME.production_settings 方式二:提前设置环境变量 $ export DJANGO_SETTINGS_MODULE=PROJECT_NAME.production_settings $ python manage.py runserver 生产环境 django 自带的 server 是专门面向开发环境提供的,实际生产环境中我比较倾向于使用 gunicorn,

S3

s3cmd with s3-compatible OSS

S3cmd 是一款免费的命令行工具和客户端,用来上传、下载和管理亚马逊 S3 对象存储以及其他兼容 S3 协议的对象存储(例如 Google Cloud Storage、DreamHost DreamObjects)上的数据。 由于它是命令行下的程序,因此更适合对命令行比较熟悉的用户使用。结合 cron 计划任务,s3cmd 也是理想的自动化备份数据到 s3 的脚本方案。 S3cmd 用 Python 语言写成,采用 GNU Public License v2 (GPLv2) 协议开源,商业和个人均可免费使用。 安装 s3cmd 使用 pip 是最理想的安装方式: $ pip install s3cmd

Python

Pyenv - Python 版本管理工具

pyenv 能够同时管理多个 Python 版本,一键切换默认版本,Pyenv 是 rbenv 和 ruby-build 分支的 Python 实现。 举例 Ubuntu Server 16.04 LTS 环境下的安装和使用 安装 2019-01-04 更新 pyenv-installer 是项目官方新发布的 pyenv 安装脚本,一条命令就可以完成各项设置。 Install: $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash Update: $ pyenv update

Python

Backblaze B2 Bucket 文件和容量统计

Backblaze B2 是眼下性价比最高的对象存储,结合 restic 加密备份工具,就可以非常低成本的实现数据安全冗余。 只是 B2 存储的 API 真是不够实在,除了常规的文件查看、上传和下载等基本操作以外,没有提供任何消费查询和用量统计的接口。 不提供就不提供吧,只要有列出文件的接口,并且能返回每个文件的尺寸信息就够了,起码可以自己累加计算。只是这样要多次发送请求才能得到最终的结果,真不节能。 import requests import base64 import json def b2_auth(): # 身份认证,获取认证 Token。属于 Class C 请求。 # 密钥格式 "keyId:applicationKey". id_and_

Python

Python 读取照片拍摄时间信息

之前的笔记 Python 照片批量重命名 记录了使用 exifread 包读取照片 EXIF 信息以及批量重命名文件的脚本。实际使用下来发现很多照片的拍摄日期信息无法获取。 看到很多人介绍使用 PIL,但看到项目主页最版新只支持到 Python 2.6,后来才发现已经有人创建了新分支 Pillow,实测支持 Python 3.7.0。这个库功能非常丰富,可以对照片做非常专业的处理,读取 EXIF 信息确实有些杀鸡用牛刀,但它实在简单好用。 安装 Pillow $ pipenv install pillow 批处理脚本 import os from PIL import Image import hachoir.parser import

Debian

Debian 网卡启动后执行脚本

正常情况下 /etc/network/if-up.d 中的脚本都会在网卡设备启动后执行,因此只要把脚本扔进去即可。 比如我在 /home/dietpi 目录下有一个 python 脚本 ipfiner.py,如果需要在网卡设备启动时执行它,可以创建文件 /etc/network/if-up.d/ipfinder: #!/bin/bash sudo -u dietpi python3 /home/dietpi/ipfinder.py 提示:使用 sudo -u 可以指定执行脚本的用户身份。

Flask

Flask-User v1.0 自定义 UserManager

Flask-User 用户注册表单的默认密码验证规则为:长度不小于 6 位,必须包含大写和小写字母。在 v0.6 版本时,可以直接通过实例化 UserManager 类时传入自定义方法重写规则。 db_adapter = SQLAlchemyAdapter(db, User) user_manager = UserManager( db_adapter, app, password_validator=password_length, user_profile_view_function=user_profile) v1.0 以后版本则需要通过创建 CustomUserManager(UserManager) 自定义类重写规则。 # 通过自定义类重写 UserManager 中的方法 class

Linode

Linode Personal Access Key

尝试通过 API 调用 Linode 上的资源信息,用默认后台创建的 API Key 发送请求一直提示 token invalid。 原因是默认管理后台的 Profile 菜单创建的 API KEY 不是 Personal Access Key,这种密钥应在 https://cloud.linode.com 新版管理后台创建。 Python 调用 Linode API 把 $(Personal Access Key) 替换成自己创建的 Personal Access Key 即可。 import requests headers = {'Authorization': 'Bearer

You've successfully subscribed to Herald's Tech Notes!