惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 司徒正美
Last Week in AI
Last Week in AI
爱范儿
爱范儿
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
量子位
V
V2EX
博客园 - 叶小钗
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
开发 Tips(7)
微信公众号 · 2019-02-24 · via 陈少文的网站

Please enable Javascript to view the contents

主要记录最近遇到的一些开发问题,解决方法。

1. Python2 和 Python3 中的异常处理

Python2,Python3 都支持的两种方式:

  • 带参数
1
2
except ExceptionType as Argument:
    # 访问 Argument
  • 不带参数

仅 Python2 支持的方式:

1
2
except ExceptionType, Argument:
    # 访问 Argument

2. Django 中的 get_object_or_404 和 get_queryset

get_object_or_404 通过使用 get 获取对象,否则返回 404

1
2
3
4
5
6
7
8
9
from django.shortcuts import get_object_or_404
from django.forms.models import model_to_dict
from django.http import JsonResponse
from .models import Fruit


def filter404(request):
    obj = get_object_or_404(Fruit, title='aa')
    return JsonResponse(model_to_dict(obj))

使用 get_queryset 可以全局的定制查询行为,包括 admin

1
2
3
class FruitManager(models.Manager):
    def get_queryset(self):
        return super(FruitManager, self).get_queryset().filter(is_delete=False)

3. 树形结构存储

  • 物化路径

每个节点存储其完整路径编码。

1
2
3
4
5
Name        Path
William     1
Jones       1/1
Blake       1/2
Adams       1/2/1

优点是读取和写入都非常快。

  • 邻接表模型

邻接列表表示通过保持到某些相邻节点的链接来存储树。

1
2
3
Name        Parent     Next
William     null       Joseph
Jones       William    Blake

优点是,结构简单易懂,但是数据量很大时,基于递归的查询效率非常低。

  • 嵌套集

每个节点存储一些索引(通常是左右值)。

1
2
3
4
Name        left   right
William     1      10
Jones       2      3
Blake       4      7

优点是查询数据很快,但是更新时,需要修改的节点很大。

  • 区间嵌套集

将区间映射为二维空间,每一个节点根据规则对应一个分数。在涉及节点位置的层次查询时,不需要访问数据库。优点是,性能非常好,但是实现和理解起来有一点门槛。

django-treebeard 实现了物化路径,嵌套集和邻接列表。 django-mptt 混合了嵌套集和邻接列表,能高效地查询子节点,被破坏时可以重建树。

4. Pytest 找不到模块报错

报错信息:

1
2
3
4
5
6
=================================== ERRORS ====================================
_____________ ERROR collecting home_application/test/test_mptt.py _____________
ImportError while importing test module 'C:\pytest\home_application\test\test_mptt.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
ImportError: No module named home_application.test.test_mptt

问题原因:

test 目录下,存在 __init__.py 文件,导致 Pytest 将整个 test 当作一个模块来处理。实际上,我们需要的是 Pytest 进入目录,找到 test_ 开头的文件,运行测试。只需要删除 __init__.py 文件即可。

5. CentOS 7 中 /etc/rc.local 开机不自动运行

查看 /etc/rc.local 内容发现:

1
2
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

CentOS 7 建议创建 systemd 用于开机自启动。

如果需要使用旧的方式,则需要添加到 /etc/rc.d/rc.local。同时,执行 chmod +x /etc/rc.d/rc.local,赋予可执行权限。

6. Secure shell Extension 插件 NaCI 退出,状态 255

报错原因是本地保存的指纹信息与主机信息不符。

解决办法:

在 shell 窗口,按下 Ctrl+Shift+J 进入调试窗口,在 console 执行:

1
term_.command.removeAllKnownHosts()

清空 known_hosts 即可。

7. Python 续行的几种方式

1,利用反斜杠

1
2
3
4
5
6
7
8
9
a = 'sdfaf' \
    'test'

a = '1' + '2' + '3' + \
    '4' + '5'

if False and \
    True:
    pass

2, 利用括号

1
2
3
4
5
6
7
8
9
a = ('sdfaf'
    'test')

a = ('1' + '2' + '3' +
    '4' + '5')

if(False and
    True):
    pass

微信公众号