[实验] Linux Django 项目的制作 (PyCharm 版)

注意:

文中的 python 系统名、mysite 项目只是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

正文:

步骤一:系统环境要求

(1)服务器的系统需要是 CentOS Linux 8 版本
(2)服务器要关闭防火墙
(3)服务器要关闭 SELinux
(4)服务器系统要配置好可用的软件源
(5)服务器要能够连接外网

步骤二:安装图形化界面

[root@django ~]# yum -y groupinstall 'Server with GUI'
[root@django ~]# systemctl set-default graphical.target
[root@django ~]# reboot

(注意:如果要到远程服务器上使用 PyCharm,则在 ssh 的时候需要添加 -X 参数:# ssh -X <用户>@)

步骤三:安装 Django

3.1 升级 pip 环境

[root@django ~]# pip3 install --upgrade pip

3.2 安装 Django

[root@django ~]# pip3 install django

3.3 将 Django 项目的目录指定为 Django 环境

[root@django ~]# python3 -m venv django_env

步骤四:创建 Django 项目

4.1 进入 Django 环境

[root@django ~]# source django_env/bin/activate

4.2 创建 Django 项目

(django_env) [root@django ~]# django-admin startproject mysite

4.3 显示已创建的 Django 项目

# cd mysite/
(django_env) [root@django mysite]# tree
.
|-- manage.py
`-- mysite
    |-- __init__.py
    |-- asgi.py
    |-- settings.py
    |-- urls.py
    `-- wsgi.py

1 directory, 6 files

步骤五:部署 PyCharm

5.1 解压 PyCharm

# tar -xvf pycharm-community-2020.1.tar.gz

5.2 修改 PyCharm 占用的内存以提高性能

5.2.1 64 位系统修改 PyCharm 占用的内存以提高性能
# vim pycharm-community-2020.1/bin/pycharm64.vmoptions

将以下内容:

-Xms128m
-Xmx750m
......

修改为:

-Xms2048m
-Xmx4096m
......
5.2.1 32 位系统修改 PyCharm 占用的内存以提高性能
# vim pycharm-community-2020.1/bin/pycharm.vmoptions

将以下内容:

-Xms128m
-Xmx750m
......

修改为:

-Xms2048m
-Xmx4096m
......

5.3 启动 PyCharm

# ./pycharm-community-2020.1/bin/pycharm.sh

5.4 初始化 PyCharm

5.4.1 勾选 “I confirm that ……”,之后点击 “Continue”
(图:1)
5.4.2 点击 “Don’t Send”
(图:2)
5.4.3 选择 “Light” 之后点击 “Next:Launcher Script”
(图:3)
5.4.4 点击 “Open”
(图:4)
5.4.5 选择刚刚创建的 Django 项目目录,并点击 “OK”
(图:5)
5.4.6 关闭提示
(图:6)
5.4.7 此时就可以开始制作 Django 网页
(图:7)

步骤六:PyCharm 卡顿的处理方法

6.1 方法一:关闭 PyCharm 的代码自动补全

(1)选择左上角的 “File” 点击 “Settings”
(2)选择 “Editor” 下的 “Code Completion”
(3)建议将 “Code Completion” 设置成如下图所示

(图:8)
(4)点击 OK

6.2 方法二:开启 “PyCharm” 的省电模式

选择左上角的 "File" 点击 “Invalidate and Restart”

补充一:Django 创建项目的命令

# django-admin startproject <project>

补充二:Django 创建子项目的命令

# django-admin startapp <subproject>

补充三:Django 开启 Web 服务的命令

# python3 manage.py runserver <local IP address>:<port>

[工具] Shell 批量检测某一个软件包的安装情况 (通过读取和生成 CSV 文件实现)

介绍

使用方法

1. 将此脚本和 patch.cs 文件放在同一目录下
2. patch.cs 里每个 IP 地址和每个 RPM 包名称占用一行
3. 给此脚本添加执行权限
4. 执行此脚本
5. 此脚本执行完成后,会将运行结果写入当前目录下的 checkout.csv 里

注意

此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器

补充

patch.cs 示例如下:

192.168.100.101,kernel-4.18.0-80.el8.x86_64,other0
192.168.100.102,kernel-4.18.0-80.el8.x86_64,other1
192.168.100.103,kernel-4.11.0-80.el8.x86_64,other2
192.168.100.104,kernel-4.18.0-80.el8.x86_64,other3
192.168.100.105,kernel-4.18.0-80.el8.x86_64,other4

脚本

#!/bin/bash

for i in `seq 1 $(cat patch.csv | wc -l)`
do

        servername=`sed -n "$[i]p" patch.csv | cut -d ',' -f 1`
        software=`sed -n "$[i]p" patch.csv | cut -d ',' -f 2`

        ssh $servername "rpm -qa | grep $software" &> /dev/null

        if [ $? -eq 0 ];then
                echo "$servername,$software,have not patched"
        else
                echo "$servername,$software,have patched"
        fi

done

[工具] Python 批量检测某个软件包的安装情况 (通过读取和生成 CSV 文件实现)

介绍 (第一个脚本)

使用方法

1. 将此脚本和 hostsrpms.csv 文件放在同一目录下
2. hostsrpms.csv 里每 1 个 IP 地址和每 1 个 RPM 包名称占用 1 行,并用逗号 “,” 隔开
3. 给此脚本添加执行权限
4. 执行此脚本
5. 此脚本执行完成后,会将运行结果写入当前目录下的 checkout.csv

注意

此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器

补充

hostsrpms.csv 示例如下:

192.168.100.101,kernel-4.18.0-80.el8.x86_64,other0
192.168.100.102,kernel-4.18.0-80.el8.x86_64,other1
192.168.100.103,kernel-4.11.0-80.el8.x86_64,other2
192.168.100.104,kernel-4.18.0-80.el8.x86_64,other3
192.168.100.105,kernel-4.18.0-80.el8.x86_64,other4

脚本 (第一个脚本)

#!/usr/bin/python3

import csv
import subprocess

checkout=open('checkout.csv','w',encoding='utf-8')
csvfile=open('hostsrpms.csv','r',encoding='utf-8')
writer=csv.writer(checkout)

for lines in csvfile:
    lines=lines.strip('\n')
    hosts=lines.split(',')[0]
    rpms=lines.split(',')[1]
    result=subprocess.call('ssh -t %s "rpm -qa | grep %s" &> /dev/null' %(hosts,rpms) , shell=True)
    
    if result==0:
        writer.writerow((hosts,rpms,'yes'))
    else:
        writer.writerow((hosts,rpms,'no'))

csvfile.close()
checkout.close()

介绍 (第二个脚本)

使用方法

1.将此脚本和 hostsrpms.csv 文件放在同一目录下
2.hostsrpms.csv 里每 1 个 IP 地址和每 1 个 RPM 包名称占用 1 行
3.给此脚本增加执行权限
4.执行此脚本
5.此脚本执行完成后,会将运行结果写入当前目录下的 checkout.csv

脚本 (第二个脚本)

#!/usr/bin/python3

import os
import paramiko
import re
import csv

port = 22
user = 'root'
password = ""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

checkout = open('checkout.csv','w',encoding='utf-8')

with open('hostsrpms.csv','r',encoding='utf-8') as csvfile:
    for lines in csvfile:

        lines=lines.strip('\n')
        hosts=lines.split(',')[0]
        rpms=lines.split(',')[1]

        ssh.connect(hosts,port,user,password,timeout = 30)
        cmd="rpm -qa | grep "
        excute = cmd+rpms
        stdin,stdout,stderr = ssh.exec_command(excute)
        result = stdout.read()
        
        match=re.findall(rpms,result.decode('utf-8'))
        if match !=[]:
           checkout.write(hosts+','+rpms+',yes'+'\n')
        else:
           checkout.write(hosts+','+rpms+',no'+'\n')
        
        ssh.close()

checkout.close()

[工具] Python 批量多线程检测服务器的联通状态

介绍

使用方法

1. 将此脚本和 ips.txt 文件放在同一目录下
2. ips.txt 里每 1 个 IP 地址占用 1 行
3. 给此脚本添加执行权限
4. 执行此脚本

脚本

#!/usr/bin/python3

import subprocess
import threading

def newping(ip):
    m=subprocess.call('ping -c3 -i0.4 -w0.8 %s &> /dev/null' %ip , shell=True)
    if m==0:
        print("%s is up" %ip)
    else:
        print("%s is down" %ip)

ips=open('ips.txt','r')

for lines in ips:
    lines=lines.strip('\n')
    newslines = threading.Thread(target=newping,args=[lines])
    newslines.start()

ips.close