0%

安装统计代码

themes/next/_config.yml中搜索static\

找到如下配置

1
2
3
# Statistics and Analytics
# See: https://theme-next.js.org/docs/third-party-services/statistics-and-analytics
# ---------------------------------------------------------------

跟着教程走就行了

阅读全文 »

引言

​ next主题内置多种第三方评论系统,如disqus

1
2
3
4
5
comments:
# Available values: tabs | buttons
style: tabs
# Choose a comment system to be displayed by default.
# Available values: changyan | disqus | disqusjs | gitalk | livere | valine

但是disqus由于种种原因无法访问,valine需要身份证号码进行实名登记

所以我选择了gitalk,他是利用github的issue来作为评论,真是github全家桶

阅读全文 »

安装python开发环境包括安装python,pip,pycharm,搜狗输入法

安装python,pip

ubuntu18.04内置了python3.6.9

1
2
3
4
5
python3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

但是没有安装pip

1
sudo apt instal python3-pip -y

有了pip3,接下来用pycharm create new project就不会出现ModuleNotFoundError: No module named 'distutils.util'错误了

  • pip和pip3的区别

python 有python2和python3的区别
那么pip也有pip和pip3的区别
大概是这样的
1、pip是python的包管理工具,pip和pip3版本不同,都位于Scripts\目录下:
2、如果系统中只安装了Python2,那么就只能使用pip。
3、如果系统中只安装了Python3,那么既可以使用pip也可以使用pip3,二者是等价的。
4、如果系统中同时安装了Python2和Python3,则pip默认给Python2用,pip3指定给Python3用。
5、重要:虚拟环境中,若只存在一个python版本,可以认为在用系统中pip和pip3命令都是相同的

安装pycharm

安装很简单

想要创建桌面快捷方式可以在pycharm菜单栏中选择tools->`Create Desktop Entry..``

点击左下角Applications就可以看到了

阅读全文 »

环境

ubuntu 20.04

node 10.21.0

下载和安装nvm

nvm是node.js的版本管理器。使用nvm可以避免出现EACCES 权限错误和方便切换node.js和npm版本。

  • 执行以下命令下载和安装nvm

注意可能由于网络问题这个命令执行没成功,请在代理环境下执行以下命令

1
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
  • 验证安装
1
2
3
command -v nvm
#或者
nvm
  • 出现nvm: command not found或者没有输出nvm

重启terminal或者参考#1404解决

仍有问题请google或者参考项目的README或者github issue解决

阅读全文 »

创建.github/workflows/pages.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

name: Deploy github pages # 工作流程的名称

on: # 触发工作流程的事件
push: # 当代码推送到远程仓库时触发
branches: # 限定分支
- source

jobs: # 工作流程中的作业
deploy: # 作业名称
runs-on: ubuntu-latest # 作业运行的操作系统环境
permissions: # 作业权限设置
contents: write # 允许写入操作

steps: # 作业中的步骤
- uses: actions/checkout@v2 # 使用 checkout 操作,从远程仓库检出代码
- name: Setup Node.js # 步骤名称
uses: actions/setup-node@v1 # 使用 setup-node 操作,设置 Node.js 环境
with:
node-version: 14.17.0 # 设置 Node.js 版本为 14.17.0
npm-version: 6.14.13 # 设置 npm 版本为 6.14.13
- name: Cache node modules # 步骤名称
uses: actions/cache@v2 # 使用 cache 操作,缓存 node_modules 目录
with:
path: node_modules # 缓存的目录路径
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} # 缓存的键
restore-keys: |
${{ runner.os }}-node- # 恢复缓存的键
- name: Install dependencies # 步骤名称
run: npm install # 运行命令,安装依赖
- name: Build # 步骤名称
run: npm run build # 运行命令,构建项目
- name: Deploy # 步骤名称
uses: peaceiris/actions-gh-pages@v3 # 使用 peaceiris/actions-gh-pages 操作,部署到 GitHub Pages
with:
github_token: ${{ secrets.GITHUB_TOKEN }} # GitHub Token,用于进行部署的身份验证 自动生成 无需手动创建
publish_dir: ./public # 要发布到 GitHub Pages 的目录

这个工作流会把 hexo 生成的 public 目录下的文件 push 到 gh-pages 分支
actions 运行结果如下图

image-20230617192254695

我的方案是:线下进行验光、购买镜片并配镜,而在线上购买镜框。

这个方案的好处在于,我可以充分享受到线下的验光和试戴等专业配镜服务,同时又能以较低的价格在线上购买适合的镜框。

具体做法如下:

  1. 验光选择多家机构。例如宝岛和医院,宝岛提供付费验光服务,可以多找几家宝岛眼镜店验光,价格也不贵,几十块钱。可以关注宝岛眼镜公众号获取周围眼镜店的位置。我自己就是先在一家宝岛眼镜店测了瞳距,但结果不太准确,于是换了一家,后来要求按流程测量三次,以获取一个比较稳定且与现有眼镜瞳距差别不大的数值。
  2. 在网上购买镜框进行试戴。可以在网上的平台(如1688)购买镜框,选择半钛或纯钛材质的镜框。此外,还需注意鼻梁最大间距和镜片最大宽度这两个参数,尽量选择与瞳距接近的数值,这样加工后的镜片会显得比较薄。

  1. 挑选眼镜店。宝岛、吴良材等眼镜店由于人工成本等原因,价格通常较高。我选择了眼镜工厂店,可以去大型商场或学校周围寻找。
  2. 选择合适的镜片。为了眼睛的保护,我选择了一个品牌镜片——依视路。在去眼镜店之前,我也在网上了解了其他人对该品牌不同系列的评价,这样在眼镜店里也不容易被店员忽悠。价格方面,我配的依视路膜岩享受原价4折优惠,还算合理。不过在体验上,好像并没有比普通镜片有明显的优势。
  3. 注意不足之处。尽管做了很多准备,最后配出来的眼镜仍存在一个问题,就是长时间佩戴后会在鼻子上留下两个红印。看来下次换镜片时需要选择更好材质的镜框才行。

引言

我们知道flask内置了jinja2模板引擎用来渲染前端页面,但在企业合作开发中,我们一般不使用这种方式,原因如下

  1. 与前端合作困难。前端写完页面,你再去改,添加诸如{}这样的模板变量,你改完,前端还得要在那些模板变量基础上改,想想都觉得不应该采用这种方式
  2. 耦合较高,htmlflask渲染产生,内置了一些逻辑语句

这种方式一般适合个人全栈开发,也有很多优点

  1. seo友好,数据全在服务端渲染,数据就在页面中,方便seo优化
  2. 部署方便,没有跨域问题,前端模板和后端在一个域下面

前后端分离

阅读全文 »

引言

蓝图(Blueprint)是flask内置模块化工具。flask一开始没有考虑大型项目,后来在源码中增加了蓝图来组织大型项目结构。

都说强扭的瓜不甜,可flask偏要看一下有多苦,苦不苦只有用的程序员知道。

当一个flask单体项目逐渐变大,如果还把所有代码写在单文件,项目维护起来就会出现各种问题。例如代码合并冲突。此时拆分代码或者说模块化就会成为我们自然的选择

阅读全文 »

引言

先看这样一个需求,flask在处理一个请求的时候,可能会在多处打日志,反映在日志文件中就是不同行,那不同行的日志怎么判断是一个请求所为呢?

我们可以给 request对象绑定一个 request_id属性,在打日志的时候带上这个属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Flask, request, current_app
import uuid

flask_app = Flask(__name__)


@flask_app.before_request
def gen_request_id():
request_id = uuid.uuid1()
request.request_id = request_id


@flask_app.route('/')
def hello_world():
current_app.logger.warn("{}".format(request.request_id))
return "hello flask"


if __name__ == '__main__':
flask_app.run()
阅读全文 »