Wagtail介绍 — 基于Django的Python CMS
关于Wagtail
Wagtail是一个用Python编写的开源CMS,并构建在Django框架上。它是由开发者为开发者开发的,它为编辑提供了一个快速吸引人的界面,让编辑可以直观地创建和结构化内容。优雅、强大和敏捷——我们对Wagtail能提供的东西感到非常自豪。
为什么使用Wagtail
有很多优秀的开源内容管理系统。我们在大型网站上非常成功地使用Drupal,包括知名的非政府组织、筹款慈善机构、智库、大学和公共部门组织。还有一些优秀的Django CMS,包括Mezzanine, Fein和Django CMS,它们的开发人员社区很好,案例研究也令人印象深刻。
但是,在建立了14年的内容管理网站之后,我们对编辑的经验和CMS的工作方式和结构有了强烈的意见,我们需要通过对现有项目的贡献来管理一个比我们能够实现的更快的发展速度。
Django友好
Django自0.96年以来一直是Andrew Godwin的热情支持者和支持者,我们很自豪地将Django和Django等Django和Django等人都在我们的校友中。
在过去的5年里,Django一直是我们最喜欢的应用程序开发的平台,因为它继续为健壮的、快速的开发和编码乐趣所带来的甜蜜点。
Wagtail 提供
- 使用标准的Django模板完全控制设计
- 通过标准的Django模型配置内容类型
- 与现有的Django应用程序的直接集成。
图像/文档管理
不要打断你的流程来添加媒体——直观设计
权限
简单且可配置,即使是复杂的需求
工作流
包括多站点和多语言支持
使用Wagtail
安装 Wagtail
pip install wagtail
建立站点
wagtail start mysite
设置数据
cd mysite
python manage.py migrate
创建管理账号
python manage.py createsuperuser
python manage.py runserver
现在,你可以登录 http://127.0.0.1:8000/admin/. 开始构建你的站点,或者查看我们的Wagtail10分钟指南。
canvas游戏指南
chrome 63通过preloaded HSTS强制.dev域名只能通过https访问
谷歌浏览器升级到63后发现本地配置的*.dev的域名都不能访问了,全都自动跳转到https。
翻出去搜一下才知道原来谷歌的博士们脑残了,在评论区被骂出翔了。
PHP用Imagck实现图片文字水平以及垂直集中
$draw = new \ImagickDraw();
$imagick = new \Imagick();
$imagick->newImage($width, $height, new \ImagickPixel('none'));
$draw->setFillColor($color);
$draw->setFont($font_file);
$draw->setFontSize($size);
$draw->setTextEncoding('UTF-8');
$stringArr = $this->mbStringToArray($text);
$textHeight = 0;
$textWidth = 0;
$charCount = count($stringArr);
$texts = [];
foreach ($stringArr as $char) {
$metrics = $imagick->queryFontMetrics($draw, $char, true);
$charHeight = $metrics['textHeight'];
$charWidth = $metrics['textWidth'];
$textHeight += $charHeight;
$textWidth += $charWidth;
$texts[] = ['char' => $char, 'height' => $charHeight, 'width' => $charWidth];
}
if ($direction == 2) {
if ($charCount > 1) {
$textHeight += ($charCount - 1) * $space;
}
$draw->setTextAlignment(\Imagick::ALIGN_CENTER);
$x = $size / 2;
if ($textHeight > $height) {
$offset = 0;
} else {
$offset = ($height - $textHeight) / 2;
}
$y = $offset;
foreach ($texts as $c) {
$y += $c['height'];
$draw->annotation($x, $y, $c['char']);
$y += $space;
}
} else {
if ($charCount > 1) {
$textWidth += ($charCount - 1) * $space;
}
$metrics = $imagick->queryFontMetrics($draw, $text, false);
$y = $metrics['ascender'];
$draw->setTextAlignment(\Imagick::ALIGN_LEFT);
if ($align == \Imagick::ALIGN_CENTER) {
if ($textWidth > $width) {
$x = 0;
} else {
$x = ($width - $textWidth) / 2;
}
} elseif ($align == \Imagick::ALIGN_RIGHT) {
$x = $width - $textWidth;
} else {
$x = 0;
}
foreach ($texts as $c) {
$draw->annotation($x, $y, $c['char']);
$x += $c['width'] + $space;
}
}
$imagick->setImageFormat("png");
$imagick->drawImage($draw);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
Vagrant box国内镜像及本地安装教程
Vagrant是非常好的本地开发环境搭建工具。
通常使用官方下载都会比较慢,而国内box下载地址较少,所以我特别下载了几个传到百度网盘。
(目前官方已支持CDN加速,可能不太需要了)
国内镜像下载
- CentOS 6/7/8 修改链接中的版本号可以下载不同版本 http://mirrors.ustc.edu.cn/centos-cloud/centos/6/vagrant/x86_64/images/
- Ubuntu Server 14.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/vagrant/trusty/current/
- Ubuntu Server 16.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/xenial/current/
- Ubuntu Server 18.04 https://mirrors.ustc.edu.cn/ubuntu-cloud-images/server/bionic/current/
- Ubuntu Server 20.04 http://mirrors.ustc.edu.cn/ubuntu-cloud-images/focal/current/
官方直接下载
- Debian 8 https://app.vagrantup.com/debian/boxes/jessie64/versions/8.11.1/providers/virtualbox.box
- Debian 9 https://app.vagrantup.com/debian/boxes/stretch64/versions/9.12.0/providers/virtualbox.box
- Debian 10 https://app.vagrantup.com/debian/boxes/buster64/versions/10.4.0/providers/virtualbox.box
- laravel/homestead https://app.vagrantup.com/laravel/boxes/homestead/versions/9.5.1/providers/virtualbox.box
官方已经采用cdn加速
vagrant box add ubuntu/trusty64
vagrant box add ubuntu/trusty32
vagrant box add generic/ubuntu1804
vagrant box add generic/ubuntu1604
vagrant box add generic/centos7
vagrant box add generic/centos8
vagrant box add generic/centos8
vagrant box add generic/debian8
vagrant box add generic/debian10
下载后的使用方法
添加vagrant box到box list
vagrant box add centos7 CentOS-7.box
初始化一个虚拟机使用刚才添加的vagrant box
vagrant init centos7
启动vagrant box虚拟机
vagrant up
PHP生成一个透明背景的PNG图像(GD+Imagick)
使用GD
header('Content-Type:image/png');
$width = 300;
$height = 300;
$color = 'ff0000';
$font_file = 'size.ttf';
$im = imagecreatetruecolor($width, $height);
$bg = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $bg);
imagefttext($im, 33, 0, 150, 150, $color, $font_file, 'test');
imagesavealpha($im, true);
imagepng($im);
imagedestroy($im);
使用imagick
$draw = new \ImagickDraw();
$imagick = new \Imagick();
$imagick->newImage($width, $height, new \ImagickPixel('none'));
$draw->setFillColor($color);
$draw->setFont($font_file);
$draw->setFontSize($size);
$draw->setTextEncoding('UTF-8');
$draw->annotation($x, $y, $text);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
使用Vagrant+CentOS 7搭建PHP7开发环境(含centos7.box直接下载地址)
Vagrant是一款基于命令行的虚拟机管理软件,可以用来快速部署统一的开发环境。
下载Vagrant
https://www.vagrantup.com/downloads.html
下载CentOS 7 Box
官方box下载地址
https://app.vagrantup.com/boxes/search
第三方box下载地址
使用原生下载
https://app.vagrantup.com/centos/boxes/7
vagrant init centos/7
vagrant up
vagrant 配置
config.vm.network "public_network", ip: "192.168.31.245"
config.vm.synced_folder "d:/data", "/data"
config.vm.synced_folder "d:/phpcode", "/phpcode"
通过下载工具下载centos 7 box
官方box文件下载地址:http://cloud.centos.org/centos/7/vagrant/x86_64/images/
百度网盘box文件下载地址:
- CentOS 7: https://pan.baidu.com/s/1kVlAz59
添加并运行box
vagrant box add centos7 CentOS-7.box
vagrant init centos7
vagrant up
基础系统安装
基本系统安装
vagrant ssh
sudo passwd vagrant
sudo yum groupinstall "Development tools" -y
sudo yum install vim gcc kernel-devel kenel-devel-`uname -r`
禁止selinux
sudo setenforce 0
sudo vi /etc/selinux/config
SELINUX=disabled
停止防火墙
sudo systemctl disable firewalld
sudo systemctl stop firewalld
更新系统
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install yum-utils
sudo yum-config-manager --enable remi-php72
sudo yum update
sudo yum install php-gd php-pdo php-opcache php-fpm php-pecl-redis php-pecl-mysql php-pecl-mysql php-mbstring php-intl php-cli php-xml
sudo yum install nginx -y
sudo yum install mariadb mariadb-server -y
修改nginx配置
mkdir /data/log/nginx /data/run/nginx -p
sudo service nginx stop
sudo vim /etc/nginx/nginx.conf
nginx.conf配置修改如下:
user vagrant;
error_log /data/log/nginx/error.log;
pid /data/run/nginx/nginx.pid;
access_log /data/log/nginx/access.log main;
include /data/phpcode/projectname/vagrant/nginx/app.conf;
测试nginx配置
sudo nginx -t
修改nginx service配置:
sudo vim /usr/lib/systemd/system/nginx.service
nginx.service修改内容如下:
[Service]
PIDFile=/data/run/nginx/nginx.pid
重新加载service
sudo systemctl daemon-reload
sudo systemctl start nginx
修改PHP配置
mkdir /data/run/php-fpm/session /data/run/php-fpm/wsdlcache /data/run/php-fpm/opcache /data/log/php-fpm/ -p
sudo service php-fpm stop
sudo vim /etc/php-fpm.d/www.conf
配置内容
user = vagrant
group = vagrant
php_value[session.save_path] = /data/run/php-fpm/session
php_value[soap.wsdl_cache_dir] = /data/run/php-fpm/wsdlcache
php_value[opcache.file_cache] = /data/run/php-fpm/opcache
php_admin_value[error_log] = /data/log/php-fpm/www-error.log
slowlog = /data/log/php-fpm/www-slow.log
request_slowlog_timeout = 1
重启
sudo service php-fpm stop
配置Mysql
mkdir /data/mysql /data/run/mariadb /data/log/mariadb -p
sudo service mariadb stop
sudo vim /etc/my.cnf
mysqld配置
[mysqld]
datadir=/data/mysql
socket=/usr/lib/mysql/mysql.sock
[mysqld_safe]
log-error=/data/log/mariadb/mariadb.log
pid-file=/data/run/mariadb/mariadb.pid
mysql client 配置
[client]
初始化数据库
sudo /usr/libexec/mariadb-prepare-db-dir mariadb.service
修改systemd配置
sudo vim /usr/lib/systemd/system/mariadb.service
配置内容
User=vagrant
Group=vagrant
重载systemd
sudo systemctl daemon-reload
sudo systemctl start mariadb
修改mysql账号密码
'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h localhost.localdomain password 'new-password'
# Alternatively you can run:
'/usr/bin/mysql_secure_installation'
配置composer
下载安装文件
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
安装
php composer-setup.php
删除安装文件
php -r "unlink('composer-setup.php');"
设置全局路径(windows请按参考文档设置)
sudo mv composer.phar /usr/bin/composer
配置使用国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
HTML中的全角、半角空格
HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格( )在不同浏览器中宽度各异。
它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格。在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个)。要使用html实体表示才可累加, 该空格占据宽度受字体影响明显而强烈。
 
它叫“半角空格”,全称是En Space,en是字体排印学的计量单位,为em宽度的一半。根据定义,它等同于字体度的一半(如16px字体中就是8px)。名义上是小写字母n的宽度。此空格传承空格家族一贯的特性:透明的,此空格有个相当稳健的特性, 就是其占据的宽度正好是1/2个中文宽度,而且基本上不受字体影响。
 
它叫“全角空格”,全称是Em Space,em是字体排印学的计量单位,相当于当前指定的点数。例如,1 em在16px的字体中就是16px。此空格也传承空格家族一贯的特性:透明的,此空格也有个相当稳健的特性, 就是其占据的宽度正好是1个中文宽度,而且基本上不受字体影响。
 
它叫窄空格,全称是Thin Space。我们不妨称之为“瘦弱空格”,就是该空格长得比较瘦弱,身体单薄,占据的宽度比较小。它是em之六分之一宽。
‌
它叫零宽不连字,全称是Zero Width Non Joiner,简称“ZWNJ”,是一个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。Unicode中的零宽不连字字符映射为“”(zero width non-joiner,U+200C),HTML字符值引用为:
‍
它叫零宽连字,全称是Zero Width Joiner,简称“ZWJ”,是一个不打印字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。零宽连字符的Unicode码位是U+200D (HTML: )。
此外,浏览器还会把以下字符当作空白进行解析:空格( )、制表位( )、换行( )和回车( )还有( )等等。
css writing-mode文字竖排(解决英文以及间距问题)
文字竖排
writing-mode: vertical-rl;
解决英文竖排问题
text-orientation:upright;
字间距
letter-spacing:8px;