Django 中 N+1 查询问题优化

12月 17, 2018
Python, Django, 系统设计

Django ORM 框架虽然很好用,但是如果不注意,在查询时很容易引发 N + 1 的查询问题。 N + 1 问题# 考虑 文章+作者 这样的 Model 层设计,在这个模型中,Author 和 Article 是一对多的关系。 from django.db import models from django.contrib.auth.models import User class …

Gitlab CI/CD 实践总结

11月 15, 2018
DevOps, Tools

Gitlab 的 CI/CD 功能可能是区别于 GitHub 的一个最有价值的功能之一。接触了 CI/CD 以来,很多以前需要手动测试、打包、部署的工作,现在都可以通过编写 .gitlab-ci.yml 来实现了,一方面持久化、规范化了部署服务的操作流程,另一方面 CI/CD 功能与 Gitlab 深度结合,方便了开发测试流程,下面总结下最常用到的功能。 概念# CI/CD# 在软件工程 …

Docker 使用笔记

7月 2, 2018
DevOps

Docker 介绍# Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker 允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务 …

魔兽世界漫游指南 - 历史篇

1月 31, 2018
Life, 历史, 魔兽世界, Game

本文重点关注魔兽世界的重大历史走向,以及世界中各个地方的风土和人情,目的是让自己在玩游戏的时候能够理顺剧情,经常 AFK 的话也能前后关联起来,魔兽世界的世界观确实太大,另外游戏的很多玩法比如职业、天赋、专业、PVP、PVE 等等就不提了,只聊剧情。 魔兽争霸 1.0 兽人与人类# 1994 年1月15 发布 很久以前,堕落泰坦萨格拉斯密谋血洗整个艾泽拉斯。为此,萨格拉斯操控人类法师麦迪文的心智, …

Django 的中间件执行顺序

11月 12, 2017
Python, Django

中间件是 Django 用来处理请求和响应的钩子框架。它是一个轻量级的、底层级的“插件”系统,用于全局性地控制 Django 的输入或输出。 MIDDLEWARE# Django 自带了一些已经内置的中间件,你可以直接使用,它们被记录在 built-in middleware reference 中。 MIDDLEWARE = [ …

数据库的 join 连接类型

9月 30, 2017
MySQL, Database

内连接# 内连接为默认连接方式,只有两张表都匹配的行才显示。 SELECT * from a INNER JOIN b on a.name=b.name;左(外)连接# 左边的表不加限制,会全部显示出来,右边的只会显示符合搜索条件的记录,不匹配的记录会以 null 显示。 SELECT * from a LEFT JOIN b on a.name=b.name;右(外)连接# 右边的表不加限制,左 …

Django 的软删除设计

2月 23, 2017
Python, Django

设计一个 Django 的软删除方案,要求数据库在删除的时候不能物理删除数据,同时尽量不要太侵入代码业务。 这里用到了 Django 的 Manager,它赋予了 Django Model 操作数据库的能力,每个 Model 都包含一个 Manager,比如我们常用的 objects 就是默认的 Manger。 这里我替换了默认的 manager,并重新实现了其 get_queryset 方法,这 …

浅谈 Django-REST-Framework 的设计与源码 R

10月 20, 2016
Python, Django, Recommended, 软件工程, 源码分析, 系统设计

最近又重新接触 DRF,翻看文档发现,当时很难理解的东西,如今一看就懂了,顺带看了源码,也比较容易理解,至少比 Django 的源码简单不少。下面开始从 DRF 的设计和源码两个方面,结合自己的看法,谈谈DRF。 APIView# APIView 是 DRF 概念体系中最基本类视图,它基于 Django 的 View,同时又实现了一层对自己创造的概念的封装,比 …

Vagrant 虚拟机 Ubuntu16.04 安装 MariaDB

9月 10, 2016
DevOps, Linux, MySQL, Database

由于宿主机安装了 MySQL,为了避免安装 MariaDB 造成 MySQL 无法使用,所以在 Vagrant 中安装 Mariadb。 更换网易 apt-get 源 /etc/apt/sources.list 读取源软件列表 sudo apt update 更新软件版本 sudo apt upgrade 安装 MariaDB sudo apt install mariadb-server 安全性 …

在公司实习了一个月的感悟

11月 24, 2015
Life

从上个月开始在大连云匠实习,在公司做 Python 后端,一个月来收获了很多。 首先是开发的流程和规范方面,之前都是自己做东西,除了实现功能外并没有考虑过多的内容。比如完整的测试用例,软件的设计模式,框架的开发标准,数据的初始化与备份,这些都是很重要的东西,在团队协作的时候更能凸显出来,同时还有需要Git熟练使用,基本在公司做的每一步都需要足够的理由去解释为什么才可以这样去做,不像之前就是各种堆 …


© 2012 - 2025 YINDONGLIANG