<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[咸鱼的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ln1593570p</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ln1593570p]]></copyright><item><title><![CDATA[pipenv高级用法]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/120572152</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/120572152</guid><author>ln1593570p</author><pubDate>Thu, 30 Sep 2021 20:40:39 +0800</pubDate><description><![CDATA[之前发布了一个修改pipenv更改默认虚拟环境的博客，这里算是对其所以然的补充。

配置

在初始化虚拟环境的时候，pipenv默认会把虚拟环境的python目录以 及后来安装的各种模块放到/home/$username/.local/share/virtualenvs里，一般/和home是在一个分区的(之前就遇到过/所在的分区写满了，整个服务器都挂掉了)，如果想放到其他地方可以有以下几种方法：

export PIPENV_VENV_IN_PROJECT=1 设置这个环境变量，pipenv会在当前目录下.]]></description><category></category></item><item><title><![CDATA[Python装饰器-服务层级事务控制]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/116798821</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/116798821</guid><author>ln1593570p</author><pubDate>Fri, 14 May 2021 18:55:58 +0800</pubDate><description><![CDATA[前言

我之前的一篇博文讲述了一个基于Flask框架，Web后端项目重构的内容，最后的服务层级事务控制一部分没有讲，在这里做一下补充，包括思想的运用和代码的展示。

出门左转另一篇博文，了解需求背景：

Flask项目使用MVC思想进行重构

正文

因为之前是用java那一套的，使用springBoot框架，那个框架相对来说比较全面，包含了各种组件，以及方便的事务控制注解组件

但是，重构的项目是Flask搭建的，比较轻量级，没有那么全面的功能。

我在重构的时候也发现了这个问题，所以，我就使用Pytho]]></description><category></category></item><item><title><![CDATA[Flask项目使用MVC思想进行重构]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/116789499</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/116789499</guid><author>ln1593570p</author><pubDate>Fri, 14 May 2021 17:21:19 +0800</pubDate><description><![CDATA[目录

前言

MVC简介

项目架构图：

系统工作原理

服务层级统一包装结果

事务控制原理和代码

前言

最近Boss有需求说要重构后端的web项目,之前是用flask+celery+mysql来搭建的，由于之前比较赶，可能比较仓促。于是让我从数据库开始，再重构一下后端项目，方便项目之后的需求的新增和扩展维护。

于时我结合后端项目的几个重要的问题：事务、并发、可扩展性（业务分层），考察了之前的项目结构和组织。发现了几个问题：

并发：对于这块，，用户群体较少，目前暂时不用考虑，所以就没有多过在意]]></description><category></category></item><item><title><![CDATA[Python装饰器]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/116786865</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/116786865</guid><author>ln1593570p</author><pubDate>Fri, 14 May 2021 13:52:24 +0800</pubDate><description><![CDATA[Python装饰器本质上是一个Python 函数或类，它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能，装饰器的返回值也是一个函数/类对象。 它经常用于有切面需求的场景，比如：插入日志、性能测试、事务处理、缓存、权限校验等场景。

python装饰器的4种类型：

1.函数装饰函数（最常用）

2.函数装饰类

3.类装饰函数

4.类装饰类

装饰器触发时刻：被装饰者被调但未调用时会立即触发装饰器 函数（类）

Python装饰器的写法核心和注意事项：



几种装饰器的写法Demo

1.]]></description><category></category></item><item><title><![CDATA[如何更改pipenv install 的虚拟环境文件夹路径]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/116306555</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/116306555</guid><author>ln1593570p</author><pubDate>Fri, 30 Apr 2021 17:01:05 +0800</pubDate><description><![CDATA[大家都知道pipenv install 可以用来建立独立的虚拟环境
但是默认情况下Pipenv会同一管理所有的虚拟环境

C:\Users\Administrator.virtualenvs\ (windows)
~/.local/share/virtualenvs/ (Linux或macOS)
这里就以Windows为例

只需设置一个环境变量就可以解决这一问题



在系统变量这如此设置就好。


PIPENV_VENV_IN_PROJECT
的作用是将虚拟环境建立在你使用pipenv install ]]></description><category></category></item><item><title><![CDATA[好用的开发工具和网站【合集】]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/116051662</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/116051662</guid><author>ln1593570p</author><pubDate>Fri, 23 Apr 2021 13:32:40 +0800</pubDate><description><![CDATA[在线画图工具

首先就是画图工具，我想了一下，程序员经常接触的无非也就是流程图、思维导图、原型图、UML图、网络拓扑图、组织结构图等等这些。

下面这三个在线画图网站我想应该足够了，其中那个processon是我用得最多的，历史文章中几乎所有相关的图形都是用它绘制，然后导出图片的。


	在线画图工具ProcessOn：https://www.processon.com/
	
	
	在线画图工具draw.io：https://app.diagrams.net/
	
	
	在线思维导图工具：http:/...]]></description><category></category></item><item><title><![CDATA[探秘SSH]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/115396308</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/115396308</guid><author>ln1593570p</author><pubDate>Fri, 02 Apr 2021 13:46:34 +0800</pubDate><description><![CDATA[目录



简介：

加密方式

SSH运行的大体流程

SSH运行第一阶段

SSH运行第二阶段

SSH运行第三阶段

D-H交换算法

简介：

SSH 为Secure Shell的缩写，由 IETF 的网络小组（Network Working Group）所制定；SSH 为建立在应用层基础上的安全协议。SSH 是较可靠，专为远程登录会话和其他网络服务提供安全性的协议。

传统的网络服务程序，如：ftp、pop和telnet在本质上都是不安全的，因为它们在网络上用明文传送口令和数据，别有用心的人...]]></description><category></category></item><item><title><![CDATA[一、ESXI系统安装（usb引导方式）]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/115392802</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/115392802</guid><author>ln1593570p</author><pubDate>Fri, 02 Apr 2021 10:40:18 +0800</pubDate><description><![CDATA[什么是ESXI?

vSphere产品套件的核心产品是虚拟机管理程序，作为一个虚拟化层次，它是产品线中的其他产品所依赖的基础，在vSphere 5 及后续版本中，虚拟机管理程序就是VMware ESXI。

你可以将它想象成vmware的专用系统，服务器安装它之后可以直接安装虚拟机，而不需要软件来支持。
...]]></description><category></category></item><item><title><![CDATA[二、ESXI系统安装网卡驱动等问题以及解决]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/115393131</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/115393131</guid><author>ln1593570p</author><pubDate>Fri, 02 Apr 2021 10:38:30 +0800</pubDate><description><![CDATA[缺少网卡驱动
如果你使用的是官网的镜像的话，一般都会遇到缺少网卡驱动的问题，只能手动打包进去,网卡驱动下载地址. 我下的是net55-r8168.

本篇教程采用本地封装的方式，避免由于网络原因导致驱动封装失败，将所需的包下载到本地后，再进行驱动封装！

1、下载VMware-PowerCLI-6.5.0和ESXi-Customizer-PS封装工具

http://down.whsir.com/downloads/VMware-PowerCLI-6.5.0-4624819.exe

http://down]]></description><category></category></item><item><title><![CDATA[从0开始搭建私有云集群（VSphere技术栈）]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/115046942</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/115046942</guid><author>ln1593570p</author><pubDate>Mon, 29 Mar 2021 18:07:07 +0800</pubDate><description><![CDATA[开始吧
]]></description><category></category></item><item><title><![CDATA[纯css实现元素平滑展开与收起]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/111462275</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/111462275</guid><author>ln1593570p</author><pubDate>Sun, 20 Dec 2020 21:21:22 +0800</pubDate><description><![CDATA[HTML部分：

      &lt;inputid="check"type="checkbox"style="display:none"/&gt;

&lt;divclass="box"&gt;要收起展开的盒子&lt;/div&gt;

&lt;divclass="up-or-down"&gt;

&lt;labelfor="check"class="check-in"&gt;
            &lt;imgsrc="@/assets/...]]></description><category></category></item><item><title><![CDATA[BFC 神奇背后的原理]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/108922137</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/108922137</guid><author>ln1593570p</author><pubDate>Sun, 04 Oct 2020 20:24:22 +0800</pubDate><description><![CDATA[一、BFC是什么？

　　在解释 BFC 是什么之前，需要先介绍 Box、Formatting Context的概念。

　　Box: CSS布局的基本单位

　　Box 是 CSS 布局的对象和基本单位， 直观点来说，就是一个页面是由很多个 Box 组成的。元素的类型和 display 属性，决定了这个 Box 的类型。 不同类型的 Box， 会参与不同的 Formatting Context（一个决定如何渲染文档的容器），因此Box内的元素会以不同的方式渲染。让我们看看有哪些盒子：

block-...]]></description><category></category></item><item><title><![CDATA[CSS关键问题]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/108909960</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/108909960</guid><author>ln1593570p</author><pubDate>Sat, 03 Oct 2020 14:47:49 +0800</pubDate><description><![CDATA[CSS三大特性：

1. 层叠性：

后来定义的同一个样式会覆盖之前的样式（后来居上）

2. 继承性：

子元素会继承父元素的样式（子承父业）,但是也不是所有的样式都能能够继承：

3. 优先级（重点）

选择器不同，会出现样式同时设置生效优先级问题（权重）：



盒模型

盒子的大小 = 内容宽高度 + 内边距 + 边框

盒子模型的布局稳定性：

 按照优先级：宽度（width）&gt;其次使用内边距（padding）&gt;再次使用外边距（mar...]]></description><category></category></item><item><title><![CDATA[Flask详解（下）]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/108389862</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/108389862</guid><author>ln1593570p</author><pubDate>Thu, 03 Sep 2020 17:51:58 +0800</pubDate><description><![CDATA[一上下文管理

当前请求到来时Flask处理的流程图：



当一个请求到来时：

请求到来之后uwsgi会触发app的__call__方法， 由__call__方法再次调用wsgi_app方法



首先将请求相关+空session封装到一个RequestContext对象中 即 ctx# self是app对象, environ请求相关的原始数据，含有self.request



通过ctx.push()将ctx交给LocalStack对象，再由LocakStack将ctx添加到Local中，lo...]]></description><category></category></item><item><title><![CDATA[Flask详解（中）]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/108389756</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/108389756</guid><author>ln1593570p</author><pubDate>Thu, 03 Sep 2020 17:50:00 +0800</pubDate><description><![CDATA[一 Flask请求和响应


from flask import Flask
from flask import request
from flask import render_template
from flask import redirect
from flask import make_response

app = Flask(__name__)


@app.route('/login.html', methods=['GET', "POST"])
def login():



请求相关信.]]></description><category></category></item><item><title><![CDATA[Flask详解（上）]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/108389564</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/108389564</guid><author>ln1593570p</author><pubDate>Thu, 03 Sep 2020 17:47:10 +0800</pubDate><description><![CDATA[一 什么是Flask

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架，对于Werkzeug本质是Socket服务端，
其用于接收http请求并对请求进行预处理，然后触发Flask框架，开发人员基于Flask框架提供的功能对请求进行相应的处理，并返回给用户，如果要返回给用户复杂的内容时，需要借助jinja2模板来实现对模板的处理，即：将模板和数据进行渲染，将渲染后的字符串返回给用户浏览器

与Django web框架对比
Django：

优点： ]]></description><category></category></item><item><title><![CDATA[Python创建守护进程]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/107882721</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/107882721</guid><author>ln1593570p</author><pubDate>Sat, 08 Aug 2020 17:20:46 +0800</pubDate><description><![CDATA[daemon.py:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
import signal

__author__ = 'lnp'

import atexit
import sys
import socket
import os

#守护进程包装类
class Daemon:

    def __init__(self,pid_file,stdout=os.devnull,stderr=os.devnull):
        self.pid_file =]]></description><category></category></item><item><title><![CDATA[Socket阻塞与非阻塞，同步与异步、I/O多路复用]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/107856931</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/107856931</guid><author>ln1593570p</author><pubDate>Fri, 07 Aug 2020 11:48:13 +0800</pubDate><description><![CDATA[1.概念

 在进行网络编程时，我们常常见到同步(Sync)/异步(Async)，阻塞(Block)/非阻塞(Unblock)四种调用方式：

 同步/异步（关注的是消息通信机制）

  同步：所谓同步，就是说调用者发送一个请求，在没有的得到被调用者时处理结果时会一直等待下去，就是，必须一件事一件事去做。

   例如普通B/S模式（同步）：提交请求-&gt;等待服务器处理（客户端浏览器不能干任何事）-&gt;处理完毕返回

 异步：所谓异步，就是说调用者发送一个请求，被调用者不能立刻返回...]]></description><category></category></item><item><title><![CDATA[【动态规划】最大子段和]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/104714724</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/104714724</guid><author>ln1593570p</author><pubDate>Sat, 07 Mar 2020 14:51:45 +0800</pubDate><description><![CDATA[动态规划之最大子段和问题

问题描述：

给定长度为n的整数序列，a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].

1.穷举法

枚举左右区间然后遍历该区间求解，时间复杂度O(n3)

2.穷举法+前缀和

在第一种方法的基础上，预处理出前缀和，在枚...]]></description><category></category></item><item><title><![CDATA[【动态规划】最长公共子序列]]></title><link>https://blog.youkuaiyun.com/ln1593570p/article/details/104714231</link><guid>https://blog.youkuaiyun.com/ln1593570p/article/details/104714231</guid><author>ln1593570p</author><pubDate>Sat, 07 Mar 2020 14:42:45 +0800</pubDate><description><![CDATA[最长公共子序列问题：

若给定序列X={x1,x2,…,xm}，则另一序列Z={z1,z2,…,zk}，是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有：zj=xij。例如，序列Z={B，C，D，B}是序列X={A，B，C，B，D，A，B}的子序列，相应的递增下标序列为{2，3，5，7}。

给定2个序列X和Y，当另一序列Z既是X的子序列又是Y的子序...]]></description><category></category></item></channel></rss>