Django(发音:[`dʒæŋɡəʊ],D不发音)是一个开源Web应用框架,由Python写成,遵循MVC/MTV模式,在BSD许可证下发行。
MIS(信息管理系统)的基础数据维护(CURD增改查删)重复且繁琐,Django-Admin读取元数据自动生成相应的管理界面,管理者可以通过Django-Admin维护基础数据以及设置权限。Django-Admin模块具有很强的可扩展性,可以基于原框架做定制化开发。
本文讲述如何在Ubuntu 22.04中安装Django-Admin,并实际创建一个MIS项目。
硬件环境
Lenovo ThinkPad T14 Gen2 20W1S3H811: Intel i5-1145G7 + DDR4 16GB + NVMe 512GB
虚拟机宿主环境
Win11 x64 Build 22621.2134 英文专业版 + VirtualBox v7.0.8 r156879
虚拟机客户机软件环境
Xubuntu 22.04最小安装,root账号已启用,APT已换国内源,apt update已完成,Screen 4.09.00 + Net-Tools + Openssh-Server 8.9p1已安装,openssh-server允许root远程登录。
安装Django框架于Python虚拟环境
安装python3-pipapt install python3-pip
查看pip版本pip -V安装virtualenv
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)pip install virtualenv
查看virtualenv版本virtualenv --version创建python虚拟环境myEnv
virtualenv 20.24.3 from /usr/local/lib/python3.10/dist-packages/virtualenv/__init__.pyvirtualenv myEnv激活虚拟环境myEnv
created virtual environment CPython3.10.12.final.0-64 in 922mscd myEnv安装Django框架
source bin/activate(myEnv) ~/myEnv#pip install django
检查Django版本(myEnv) ~/myEnv#django-admin --version
4.2.4
实际创建一个MIS项目
创建一个管理Wi-Fi信息,包括地点、SSID、BSSID、密码等的MIS项目。
假设已经创建好的虚拟环境myEnv中也安装好了Django框架。
创建项目myProject(myEnv) ~/myEnv#django-admin startproject myProject # 创建名为myProject的项目
编辑myProject/myProject/settings.py使django-admin允许从其他IP地址访问(myEnv) ~/myEnv#cd myProject/myProject # 切换/myEnv/myProject/myProject为当前目录(myEnv) ~/myEnv/myProject/myProject#vi settings.py # 编辑settings.py
找到ALLOWED_HOSTS = [],改为ALLOWED_HOSTS = ['*'],保存退出。
迁移Django数据库(myEnv) ~/myEnv/myProject/myProject#cd .. # 切换到上一级目录为当前目录(myEnv) ~/myEnv/myProject#python manage.py migrate # 迁移数据库
迁移完成后,/myEnv/myProject目录下会出现db.sqlite3文件
创建superuser(myEnv) ~/myEnv/myProject#python manage.py createsuperuser启动Django-Admin监听TCP/IP端口8000
Username (leave blank to use 'root'):
Email address:
Password:
Password (again):
Superuser created successfully.(myEnv) ~/myEnv/myProject#python manage.py runserver 0:8000 # 0:8000代表主机所有网卡8000端口都监听;只想在主机某个指定的网卡监听,可以把0换成该网卡的IP地址,例如192.168.1.1:8000。
在浏览器地址栏输入 https://Django-Admin主机IP:8000/,可以看到以下页面:

在浏览器地址栏输入 https://Django-Admin主机IP:8000/admin,打开Django-Admin登录页面:

输入前面创建的superuser账号密码,登录Django-Admin管理后台。可以看到已经默认创建了AUTHENTICATON AND AUTHORIZATION这个App,里面包括Groups和Users这两个已注册的admin类(后面详细讲)。

至此,Django-Admin基础部署完成,下面创建App。
按Ctrl-C停止Django-Admin^C(myEnv) ~/myEnv/myProject#
创建应用myApp(myEnv) ~/myEnv/myProject#python manage.py startapp wifi # 创建名为wifi的应用
把应用WiFi添加到myProject项目(myEnv) ~/myEnv/myProject#cd myProject # 切换/myEnv/myProject/myProject为当前目录(myEnv) ~/myEnv/myProject/myProject#vi settings.py # 编辑settings.py
在INSTALLED_APPS[]中增加一行'myApp',
创建应用WiFi的ORM模型/数据库结构(myEnv) ~/myEnv/myProject/myProject#cd ../wifi # 切换/myEnv/myProject/wifi为当前目录(myEnv) ~/myEnv/myProject/wifi#vi models.py # 编辑ORM模型文件models.py
输入################################之间的内容
################################
from django.db import models
# Create your models here.
class GenericModel(models.Model):
publishDatetime = models.DateTimeField(u'Publish Datetime', auto_now_add=True, editable=True)
updateDatetime = models.DateTimeField(u'Update Datetime', auto_now=True, null=True)
class Meta:
abstract = True
class WiFi(GenericModel):
location = models.CharField(u'Location', max_length=256, null=True, blank=True)
ssid = models.CharField(u'SSID', max_length=256, null=True, blank=True)
bssid = models.CharField(u'BSSID', max_length=17, null=True, blank=True)
password = models.CharField(u'Password', max_length=256, null=True, blank=True)
class Meta:
ordering = ('location', 'ssid',)
verbose_name = 'WiFi'
verbose_name_plural = 'WiFi'
def __str__(self):
if self.ssid is not None:
return self.ssid
return '[UnknownWiFi]'
################################
将ORM模型迁移到数据库(myEnv) ~/myEnv/myProject/wifi#cd .. # 切换上一级目录为当前目录(myEnv) ~/myEnv/myProject#python manage.py makemigrations wifi # 创建迁移(myEnv) ~/myEnv/myProject#python manage.py migrate wifi # 迁移
注册admin类(myEnv) ~/myEnv/myProject#cd wifi # 切换wifi为当前目录(myEnv) ~/myEnv/myProject/wifi#vi admin.py # 编辑admin.py
输入################################之间的内容
################################
from django.contrib import admin
# Register your models here.
from wifi.models import WiFi
@admin.register(WiFi)
class WiFiAdmin(admin.ModelAdmin):
list_display = ('id', 'location', 'ssid', 'bssid', 'password',)
list_per_page = 100
ordering = ('location', 'ssid',)
#list_editable = ['location', 'bssid',]
list_display_links = ('id', 'location', 'ssid', 'bssid',)
################################
启动Django-Admin监听TCP/IP端口8000(myEnv) ~/myEnv/myProject/wifi#cd ..
(myEnv) ~/myEnv/myProject#python manage.py runserver 0:8000
在浏览器地址栏输入 https://Django-Admin主机IP:8000/admin,用superuser账号密码登录。可以看到新增了wifi应用(Django-Admin默认把App名称均大写),里面有名为WiFi的admin类。

点击WiFi进入WiFi应用;再点击ADD WIFI ➕尝试增加一条记录,点击Save保存。


迁移Django-Admin项目
在源服务器上备份
在源服务器上按下Ctrl-C停止Django-Admin监听,deactivate退出虚拟环境,将myEnv/myProject打包压缩: tar -zcvf ../myProject.datetime.tar.gz ./*
在目的服务器上恢复
在目的服务器上按下Ctrl-C停止Django-Admin监听,deactivate退出虚拟环境,在项目目录myProject中解压缩: tar -zxvf ../myProject.datetime.tar.gz .
在目的服务器上激活虚拟环境myEnv: #source bin/activate,启用Django-Admin监听: python manage.py runserver 0:8000
Leave a Reply