<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Macau Fish的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sukizhon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sukizhon]]></copyright><item><title><![CDATA[Docker搭建django调试服务器]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/130582469</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/130582469</guid><author>sukizhon</author><pubDate>Tue, 09 May 2023 17:12:14 +0800</pubDate><description><![CDATA[注意: “groupadd -g 1000 web && useradd -u 1000 -g web weber”, 其中的"-g 1000"和"-u 1000"分別代表用户组和用户, 对应docker主机的用户(可使用linux命令id查看)]]></description><category></category></item><item><title><![CDATA[(2022) netmiko - 2.批量登录交换机（加强版）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/125095368</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/125095368</guid><author>sukizhon</author><pubDate>Thu, 02 Jun 2022 10:05:25 +0800</pubDate><description><![CDATA[實現同時登入多台設備，提升效率！]]></description><category></category></item><item><title><![CDATA[Django模型1對多的查詢用法]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/125051531</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/125051531</guid><author>sukizhon</author><pubDate>Mon, 30 May 2022 18:27:22 +0800</pubDate><description><![CDATA[# models.py
# 基金庫：基金代碼，基金名稱
class Fund(models.Model):
    code = models.CharField(max_length=20, unique=True, primary_key=True)
    name = models.CharField(max_length=250, blank=True, default='')

# 基金净值庫：基金代碼，净值日期，净值，增長率，備注
class FundData(models.Model):
 ]]></description><category></category></item><item><title><![CDATA[(2022) netmiko - 1.批量登录交换机]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/125032952</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/125032952</guid><author>sukizhon</author><pubDate>Sun, 29 May 2022 17:21:43 +0800</pubDate><description><![CDATA[前言：
Environment：
python = 3.9.0
netmiko = 4.1.0 （pip install netmiko）
pyyaml = 6.0     （pip install pyyaml)
文件内容
为方便以后管理，使用YAML文件作为设备库（也可以使用json，但YAML更直观：）。
inventory.yml 如下：
# inventory.yml
SW01:
  device_type: cisco_ios
  host: 10.0.0.1
  username: user1]]></description><category></category></item><item><title><![CDATA[好用的线程池ThreadPoolExecutor]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/120241229</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/120241229</guid><author>sukizhon</author><pubDate>Sat, 11 Sep 2021 18:09:48 +0800</pubDate><description><![CDATA[from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def myfunc(ip):
    print(f"{ip} start.")
    time.sleep(1)
    print(f"{ip} done.")
    return f"{ip} done."

if __name__ == '__main__':
    ip_list = [
        f"10.99.8.{host}"]]></description><category></category></item><item><title><![CDATA[多网络设备通过IP地址多线程连接框架]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/120235983</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/120235983</guid><author>sukizhon</author><pubDate>Sat, 11 Sep 2021 12:22:26 +0800</pubDate><description><![CDATA[import queue
import threading
from time import sleep
import random

def get_log(ip_q: queue.Queue):
    while not ip_q.empty():
        ip = ip_q.get()
        print(f'Start to get log of {ip}')
        sleep(random.randint(1,3))  # 对设备进行操作
        print(f]]></description><category></category></item><item><title><![CDATA[debian10搭建django+uwsgi+nginx网站（下）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/119457508</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/119457508</guid><author>sukizhon</author><pubDate>Fri, 06 Aug 2021 17:12:15 +0800</pubDate><description><![CDATA[上一回，我们已经把nginx+uwsgi+django搭建起来了。
这一次，我们先把主机重启一下，然后用浏览器打开 http://主机IP地址，502错误重现了！

看来是因为uwsgi没有开机自启动，那我们来让他启动吧：
因为在上一节中，只在虚拟环境中安装uwsgi，首先进入虚拟环境
muchun@web:~$ source ~/venv/bin/activate
(venv) muchun@web:~$

通过ini配置文件启动uwsgi
(venv) muchun@web:~$ cd uwsgi
(v]]></description><category></category></item><item><title><![CDATA[debian10搭建django+uwsgi+nginx网站（上）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/119428245</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/119428245</guid><author>sukizhon</author><pubDate>Fri, 06 Aug 2021 13:59:09 +0800</pubDate><description><![CDATA[Part A - Django

安装虚拟环境模块

muchun@web:~$ sudo apt install -y python3-venv


在当前用户目录下创建虚拟环境venv

muchun@web:~$ python3 -m venv ~/venv


进入虚拟环境

muchun@web:~$ source ~/venv/bin/activate
(venv) muchun@web:~$


安装django，指定版本为3.2

(venv) muchun@web:~$ pip insta]]></description><category></category></item><item><title><![CDATA[logging的用法（Python）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/116794509</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/116794509</guid><author>sukizhon</author><pubDate>Fri, 14 May 2021 15:59:23 +0800</pubDate><description><![CDATA[使用logging來記錄日志
import logging

log1 = logging.getLogger('MAN01')
log1.setLevel(logging.DEBUG)
fmt1 = logging.Formatter(
    '%(asctime)s [%(levelname)-8s] (%(name)s): %(msg)s',  # 輸出格式
    datefmt='%Y/%m/%d %H:%M:%S'  # 日期格式
)

# 定義文件輸出
fh_a = logging.File]]></description><category></category></item><item><title><![CDATA[AJAX提交使用crsf認證]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/116206140</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/116206140</guid><author>sukizhon</author><pubDate>Tue, 27 Apr 2021 18:37:25 +0800</pubDate><description><![CDATA[$('#d1').click(function (){
	$.ajax({
		url:'',
		type:'post',
		//第一種：利用標簽查找獲取頁面上的隨機字符串
		data:{"username":'xiaoming', "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val()},
		//第二種: 利用模板語法提供的快捷書寫
		data:{"username":'xiaoming', 'csrfmiddlewaretok]]></description><category></category></item><item><title><![CDATA[django之session的介紹]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/116016801</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/116016801</guid><author>sukizhon</author><pubDate>Thu, 22 Apr 2021 16:20:05 +0800</pubDate><description><![CDATA[Session的使用
session數據保存在數據庫中，表名是django_session，使用以下命令會自動創建
python manage.py migrate

注意事項

默認過期時間是14天
同一台PC同一個瀏覽器只會有一條數據生效（session過期會出現多條數據對應一個瀏覽器，過段時間會自動清理，也可以手動清理）

過程
創建 request.session[‘username’] = ‘xiaoming’

自動生成一個隨機字符串
自動將隨機字符串和對應數據存儲到django_session]]></description><category></category></item><item><title><![CDATA[django 之 使用cookie]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/116016417</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/116016417</guid><author>sukizhon</author><pubDate>Thu, 22 Apr 2021 15:30:07 +0800</pubDate><description><![CDATA[django - cookie操作
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username, password)
        if username == 'superman' and password == '123']]></description><category></category></item><item><title><![CDATA[Python多线程——信号量]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/115532446</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/115532446</guid><author>sukizhon</author><pubDate>Thu, 08 Apr 2021 21:46:02 +0800</pubDate><description><![CDATA[import threading
import time
import random

def run(n):
    semaphore.acquire()
    sleep_time = random.randint(1,30)
    print("run the thread:%s, sleep: %ss" % (n, sleep_time))
    
    time.sleep(sleep_time)    
    semaphore.release()

if __name__ == .]]></description><category></category></item><item><title><![CDATA[Python之socket初探]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/114526499</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/114526499</guid><author>sukizhon</author><pubDate>Mon, 08 Mar 2021 11:36:03 +0800</pubDate><description><![CDATA[效果：server和client建立对话，client发送字符串，server接收后返回大写字符串。

server端代码如下：


import socket

server = socket.socket()
server.bind(('localhost', 6969))  #绑定监听端口

server.listen()
print("Start to listening...")

conn,addr = server.accept()  #等待连接
print(conn, addr)

data]]></description><category></category></item><item><title><![CDATA[python最简单的字符串转字典（str 2 dict）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/114373892</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/114373892</guid><author>sukizhon</author><pubDate>Thu, 04 Mar 2021 17:37:04 +0800</pubDate><description><![CDATA[代码如下：


a = '''{'name': 'xiaoming', 'score':{'chinese': 95,'english': 93,'math': 98} }'''
b = eval(a)
print(type(a), a)
print(type(b), b)

运行如下：


&lt;class 'str'&gt; {'name': 'xiaoming', 'score':{'chinese': 95,'english': 93,'math': 98} }
&lt;class 'dict'&]]></description><category></category></item><item><title><![CDATA[网络管理自动化 - Ansible 入门（2）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/114289404</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/114289404</guid><author>sukizhon</author><pubDate>Tue, 02 Mar 2021 17:14:19 +0800</pubDate><description><![CDATA[基础配置请参考前文，点击跳转：网络管理自动化 - Ansible 入门（1）

基础配置后，开始来写playbook，目的让设备按剧本来配置。

目录下新建一个playbook_1.yml，内容如下：


---
- name: General Config

  hosts: AS  #运行对象为Access Switch

  gather_facts: no  #禁止搜集信息

  tasks:
  - name: Add Banner  #添加登录提示
    ios_banner:
      b]]></description><category></category></item><item><title><![CDATA[网络管理自动化 - nornir 3.0 入门（1）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/114269547</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/114269547</guid><author>sukizhon</author><pubDate>Mon, 01 Mar 2021 19:34:15 +0800</pubDate><description><![CDATA[1. 基础配置

目录结构如下：


.
|-- config.yaml  #配置文件，定义设备库的路径，线程等
|-- inventory
|   |-- defaults.yaml  #所有设备默认配置
|   |-- groups.yaml  #组内设备共有配置
|   `-- hosts.yaml  #单个设备配置
|-- main.py  #运行文件


config.yaml 内容如下：


---
inventory:
        plugin: SimpleInventory
  ...]]></description><category></category></item><item><title><![CDATA[网络管理自动化 - Ansible 入门（1）]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/114267868</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/114267868</guid><author>sukizhon</author><pubDate>Mon, 01 Mar 2021 17:47:01 +0800</pubDate><description><![CDATA[场景：某公司内部有1台路由器，1台核心交换机，2台接入交换机，希望通过ansible来进行管理。

做法：linux主机下创建ansible文件夹，文件夹内创建ansible.cfg（名字不能改）和hosts（名字可改），

ansible.cfg 内容如下：


[defaults]
host_key_checking = False  #跳过SSH key的检查
inventory = ./hosts  #使用自定义的设备目录
timeout = 5  #连接超时

hosts 内容如下：


[R] ]]></description><category></category></item><item><title><![CDATA[Django两种创建数据比较：Normal & CreatView]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/113280248</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/113280248</guid><author>sukizhon</author><pubDate>Wed, 27 Jan 2021 23:10:23 +0800</pubDate><description><![CDATA[Django两种创建数据的比较：



			                      Normal
			
			
			                           CreatView
			
		
			models.py
			
		
			fromdjango.dbimportmodels

			

			classCustomer(models.Model):

			...]]></description><category></category></item><item><title><![CDATA[华为smart-link需要注意的一个问题]]></title><link>https://blog.youkuaiyun.com/sukizhon/article/details/113041164</link><guid>https://blog.youkuaiyun.com/sukizhon/article/details/113041164</guid><author>sukizhon</author><pubDate>Sat, 23 Jan 2021 13:43:05 +0800</pubDate><description><![CDATA[Smart Link，又叫做灵活链路或备份链路。一个Smart Link由两个端口组成，其中一个端口作为另一个的备份。Smart Link常用于双上行组网，提供可靠高效的备份和快速的切换机制。

实际场景：有两台交换机：（上游）思科C3750，（下游）华为S5720，通过两条链路连接TRUNK，其中一条是链路备份。上游思科运行PVST，下游华为运行smart link，因某些原因，暂不考虑VBST和LACP。

发现问题：运行正常时，其中一条链路状态为Active，另一条状态为Inactive，通过在上游的]]></description><category></category></item></channel></rss>