Django admin 配置
Django 自带的 Admin Site
管理页面可以方便用户快速构建一个简单的后台管理系统,少量代码即可快速实现对数据库中的数据进行展示、修改、保存的可视化页面和功能。当需要对后台展示的数据进行配置时,只需要在 app
的代码文件 admin.py
中进行相应配置即可。
环境信息
- centos 7
- python 3.10
- django 4.0
为 model 配置 admin 管理页面
要为 model 启用 admin 管理接口,参考配置
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-shell-4.0.28-1.el7.x86_64.rpm |
Django 模板之间存在各种复杂的继承关系,最基础的模板为 base.html
,文件位于 python3.11/site-packages/django/contrib/admin/templates/admin/base.html
。下面以 Admin 页面中的各个模块来解析实现对应模块的模板及代码。
title
指网页标题,以 Admin 站点的首页为例,首页的模板文件 index.html
中未定义 title
信息,而是继承自 base_site.html
{% extends "admin/base.html" %} |
base_site.html
模板继承了模板 base.html
,并使用 {% block title %}
标签复写了继承自 base.html
模板的 title
信息。默认显示 Django site admin
,如果应用的 admin.py
中定义了 admin.site.site_title
,则显示其内容
{% load i18n static %}<!DOCTYPE html> |
基础模板 base.html
中 title
信息默认为空。
Admin 管理页面最顶部左上角会展示默认的 Django 管理
或者站点标题,如果应用的 admin.py
中配置了 admin.site.site_header
,则显示站点标题,这是一个链接,点击后会跳转首页。
这部分的实现是通过继承 base_site.html
实现,其中的 {% block branding %}
定义了这部分内容。
{% extends "admin/base.html" %} |
Django admin 站点默认会显示如下的欢饮信息及修改密码、注销等链接
此处的配置位于 base.html
中的 {% block usertools %}
块内,{% block usertools %}
块位于 {% block header %}
块内。
{% block header %} |
如果要自定义自己的页面,并实现和 Django admin 一致的风格,比如一样的 branding 和用户欢迎信息,可以使用如下代码实现
{% extends "admin/base_site.html" %} |
SELECT * FROM [TABLE] |
参数说明:
into outfile ‘导出的目录和文件名’
fields terminated by ‘字段间分隔符’
optionally enclosed by ‘字段包围符’
optionally enclosed by
对数值型字段无效
lines terminated by ‘行间分隔符’
产生报错可参考 Mysql 常见错误
insert into tb(c1,c2) values(1,2),(3,4),(5,6); |
错误场景 : windows 系统中 git push
报错
错误原因 : 大概率为用户密码错误
排查步骤 :
.git/config
文件,对 url
按照如下格式配置:url = http://USERNAME@git.server.com/test.git |
USERNAME
为用户名,重新执行 git push
,此时会要求输入用户密码,输入正确的用户密码后,可正常执行执行 git pull
命令时报错:
$ git pull |
此错误原因为本地的分支(activity
)未和远程分支建立关联,根据提示,执行以下命令建立关联关系
$ git branch --set-upstream-to=origin/activity origin/xhy-activity |
执行报错: fatal: Ambiguous object name: 'origin/activity'.
,此报错原因为本地已存在分支 origin/activity
,远程也存在此分支,导致 git 无法分辨。可以执行以下命令重命名本地分支
git branch -m origin/activity activity |
重新建立关联关系
$ git branch --set-upstream-to=origin/activity activity |
关联正常后,执行 git pull
正常。
调用 API 接口需要使用 API key 及账号密码。API 接口申请 key 时需要添加 IP 白名单,只允许从添加的白名单 IP 请求 API。
API 默认返回的数据格式为 TEXT
,建议指定数据返回格式为 JSON
,通过 eval(response.content)
将返回的字节类型数据转换为字典类型。
>>> params = {'ApiKey': 'key', 'Password': 'pswd', 'ResponseFormat': 'JSON'} |
>>> params = {'ApiKey': 'key', 'Password': 'pswd', 'ResponseFormat': 'JSON'} |
Python SDK 为 python-namesilo,安装方法
pip install python-namesilo |
使用 SDK 之前需要先登陆账号创建 API Token,详细使用方法可以查看帮助信息,获取所有域名使用方法 list_domains
>>> from namesilo.core import NameSilo |
获取指定域名的详细信息使用 get_domain_info
,此方法返回一个 DomainInfo
对象,里面包括域名创建时间,过期时间,nameserver等信息
>>> client.get_domain_info('test.app') |
脚本内容如下,本示例中 Windows 版 rsync
客户端安装位置: d:\cwrsync_6.2.4_x64_free\
,密码文件路径:d:\cwrsync_6.2.4_x64_free\rsync.client.pswd
|
宿主机操作系统内核配置允许数据转发,开启系统 IPv4 转发功能
用了在启动容器时挂载以持久化 OpenVPN 配置
mkdir /opt/openvpn1/ |
执行以下命令初始化 OpenVPN 服务端配置
docker run --rm \ |
参数说明:
udp://${PUB_IP}:1194
- 指定 VPN 服务器配置,使用 1194/udp
端口。${PUB_IP} 为服务器公网 IP。docker run --rm -it \ |
根据提示,输入 CA 根证书密码及名称
执行以下命令,根据提示输入客户端证书密码及 CA 密码,生成客户端证书。如果客户端证书无需密码,最后加选项 nopass
docker run --rm -it \ |
docker run --rm -it \ |
docker run -it --name OpenVPN1 \ |
防火墙放通 1194/udp
端口
-A INPUT -p udp --dport 1194 -j ACCEPT -m comment --comment "openvpn" |
OpenVPN 启动后,docker 会在宿主机操作系统的 iptables 中添加对应的 MASQUERADE
规则,负责转发和 NAT 数据,具体规则可通过以下方法查看
查看 NAT 表添加的规则
$ iptables -t nat -L -v -n --line-numbers | more |
查看 FILTER 表添加的规则
$ iptables -L -v -n --line-numbers | more |
将 导出客户端证书 中生成的客户端证书发送到客户端,测试连接。
客户端连接失败,可以检查以下内容:
客户端日志及服务端日志,服务端日志可以通过以下方法查看
docker logs -f OpenVPN |
检查是否是因为 iptables 防火墙规则 问题导致无法连接,如果防火墙相关规则丢失,可以通过重启 docker 和 OpenVPN 容器的方式恢复。
检查容器中启动的端口和 docker 映射的端口是否一致。
常用选项
选项 | 说明 | 示例 |
---|---|---|
-c |
打包文件 | |
-x |
解包 | |
-t |
检测打包文件中的内容 | tar -tf test.tar |
-f |
目标文件名称,要打包或解包的文件名 | tar -cf test.tar test tar -xf test.tar |
--exclude |
打包时排除文件 打包的目录使用相对路径,排除的文件只能接相对路径 打包的目录使用绝对路径,排除的文件接相对路径或绝对路径 |
tar -cf test.tar test --exclude=runtime/* |
firewalld
是 iptables
的一个封装,可以让你更容易地管理 iptables
规则, 它并不是 iptables
的替代品。虽然 iptables
命令仍可用于 firewalld
,但建议使用 firewalld
时仅使用 firewalld
命令。 [1]
firewalld
是 iptables
的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables
相比,使用 firewalld
有两个主要区别:
firewalld
使用区域和服务而不是链式规则。配置文件位于两个目录中:
/usr/lib/firewalld/
下保存默认配置,如默认区域和公用服务。避免修改它们,因为每次 firewall
软件包更新时都会覆盖这些文件。/etc/firewalld
下保存系统配置文件。 这些文件将覆盖默认配置。firewalld
使用两个配置集: 运行时
和 持久
在系统重新启动或重新启动 firewalld
服务时,不会保留 运行时
的配置更改,而对 持久
配置集的更改不会应用于正在运行的系统。
默认情况下,firewall-cmd
命令适用于 运行时
配置,但使用 --permanent
选项将保存配置到 持久
配置中。
要添加和激活持久性规则,你可以使用以下两种方法之一:
sudo firewall-cmd --zone=public --add-service=http --permanent |
firewalld
sudo firewall-cmd --zone=public --add-service=http --permanent |
--reload
选项会删除所有 运行时
配置并应用 持久
配置。因为 firewalld
动态管理规则集,所以它不会破坏现有的连接和会话。
epel 仓库源中包含了 OpenVPN 的安装包
$ yum info openvpn |
easy-rsa 主要用来生成证书
yum install easy-rsa |
FTP(File transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,
其中端口 20(数据端口)用于进行数据传输,端口 21(命令端口)用于接受客户端发出的相关 FTP 命令与参数。
FTP 有两种工作模式:
FTP 协议需要用到两个 TCP 连接:
无论是主动模式还是被动模式,其要进行文件传输都必须依次建立两个连接,分别为命令连接与数据连接。而主动模式与被动模式的差异主要体现在数据连接通道上。[1]
# 匿名用户和本地用户是否能登录,匿名用户使用的登陆名为ftp或anonymous,口令为空,匿名用户不能离开匿名 用户家目录/var/ftp,且只能下载不能上传。 |
# 若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。 |
NFS(Network File System 的缩写),它的主要功能是:通过网络、让不同的机器、不同的 OS 可以共享彼此的文件
NFS 服务器可以允许 NFS 客户端将远端 NFS 服务器的共享目录挂载到自己的系统上,当作本地磁盘一样使用
安装需要的软件包
yum -y install nfs-utils rpcbind |
创建数据目录
mkdir /data/NFSDataHome |
修改配置文件 /etc/exports
:
/data/NFSDataHome 192.168.1.0/24(rw,sync,insecure,no_subtree_check,no_root_squash) |
相关选项说明:
参数 | 说明 |
---|---|
ro | 只读访问 |
rw | 读写访问 |
sync | 所有数据在请求时写入共享 |
async | nfs 在写入数据前可以响应请求 |
secure | nfs 通过 1024 以下的安全 TCP/IP 端口发送 |
insecure | nfs 通过 1024 以上的端口发送 |
wdelay | 如果多个用户要写入 nfs 目录,则归组写入(默认) |
no_wdelay | 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置 |
hide | 在 nfs 共享目录中不共享其子目录 |
no_hide | 共享 nfs 目录的子目录 |
subtree_check | 如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认) |
no_subtree_check | 不检查父目录权限 |
all_squash | 无论 NFS 客户端以哪种用户身份访问,均映射为 NFS 服务器的 nfsnobody 用户 |
no_all_squash | 保留共享文件的 UID 和 GID(默认) |
root_squash | 当 NFS 客户端以 root 用户身份访问时,映射为 NFS 服务器的 nfsnobody 用户 |
no_root_squash | 当 NFS 客户端以 root 身份访问时,映射为 NFS 服务器的 root 用户,也就是要为超级用户保留权限。这个选项会留下严重的安全隐患,一般不建议采用。 |
anonuid=xxx | 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID |
anongid=xxx | 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID |
Centos 7 上面安装 Fiddler,需要先安装 mono
,并且需要图形桌面系统支持。
Mono(https://github.com/mono/mono) is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
The Mono project is part of the .NET Foundation(https://github.com/dotnet)
首先安装 mono-complete
,yum
源 epel
中包含了此安装包
$ yum info mono-complete |
下载 Fiddler 安装包
wget http://www.telerik.com/docs/default-source/fiddler/fiddler-linux.zip |
解压运行 Fiddler
unzip fiddler-linux.zip -d fiddler-linux |
启动过程中报错,原因为需要桌面系统支持。可以在图形桌面系统中开启 shell,执行启动命令 mono ./Fiddler.exe
SoftEther VPN Server 有两种模式,Service Mode
和 User Mode
,本文档安装使用 Service Mode
[1]
Service Mode
- 安装之后以系统服务的形式存在(被管理)User Mode
- 安装之后不存在对应的服务,(管理员)用户直接通过进程管理,程序启动停止需要(管理员)用户手动停止相应进程安装依赖包
yum -y install gcc zlib-devel openssl-devel readline-devel ncurses-devel |
参考链接 下载最新的安装包,本文档使用版本 4.41 版本 [2]
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz |
使用以下命令编译生成可执行文件
make |
将编译后的目录移动到 /usr/local/
下,并修改权限
cd .. |