Django-admin 后台管理系统的快速体验
配置开发环境
安装python
请自行搜索,本项目使用版本为 3.7
安装项目相关的python模块
- django==3.0.7
- django-multiselectfield==0.1.12
- django-simpleui==4.0.3
- openpyxl
- pillow
初始化和启动django
虚拟环境搭建
- 管理员权限运行终端,更改执行策略 Set-ExecutionPolicy Unrestricted
- pip install virtualenv
- 新建一个项目文件夹作为项目专用的虚拟空间
- 在终端指向文件夹地址并命令: virtualenv . 将在该目录下自动下载生成虚拟环境的必须文件,并将该文件夹空间设置为一个独立的虚拟空间
- 将当前终端切换至虚拟空间: .\Scripts\activate
- 若在终端前面生成(文件夹名)的字符,则切换环境成功,并在该虚拟环境下独立配置项目所需的各版本的模块包 deactivate 退出当前虚拟环境
Django项目搭建
项目初始化
- 在虚拟环境下安装所需模块包
pip install django == 版本号
- 新建一个django项目目录
django-admin startproject mysite
- 在mysite目录下启动vscode
cd mysite code .
- 此时项目目录树应该是这样:
mysite/
│ manage.py # 一个让你用各种方式管理 Django 项目的命令行工具。
│ mysite/ # 一个纯 Python 包。引用时(比如 mysite.urls).
│ │ init.py # 入口
│ │ settings.py # Django 项目的配置文件。
│ │ urls.py # 配置 Django 项目的 URL,就像你网站的“目录”。
│ │ asgi.py # 项目的运行在 ASGI 兼容的Web服务器上的入口。
│ │ wsgi.py # 项目的运行在 WSGI 兼容的Web服务器上的入口。
用于开发的简易服务器
启动的是 Django 自带的专用于开发阶段的简易服务器,它是一个用纯 Python 写的轻量级的 Web 服务器。
在开发过程中服务器可以一直开着,在网页端可以与代码同步地显示
部署到生产环境下时需要切换服务器。
py manage.py runserver
也可以指定端口
py manage.py runserver 8080
添加应用
- 在mysite目录下, 创建自定义app,与mysite在同级目录下
django-admin startapp appname
- 新建一个路由配置文件 urls.py
mysite/
│ manage.py # 一个让你用各种方式管理 Django 项目的命令行工具。
│
├─app/ # 自定义项目文件
│ │ admin.py
│ │ apps.py
│ │ models.py # 数据模型
│ │ tests.py
| | urls.py # 配置路由(与mysite.urls配合)
│ │ views.py # 编写业务逻辑处
│ │ init.py
│ │
│ └─migrations/ # 数据库迁移
│ init.py
│
└─mysite/ # 项目基础的 Python 包。
asgi.py
settings.py
urls.py
wsgi.py
init.py
- 配置好app文件夹下的py文件和 mysite 下的
settings.py、urls.py等后启动开发服务器后打开浏览器,转到你本地域名的 "/app/" 目录, -- 比如 "http://127.0.0.1:8000/app/"就应该能看到自定义的app页面,这里的配置不详述
数据库迁移
打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。通常,这个配置文件使用 SQLite 作为默认数据库。确定数据库配置后开始进行数据库迁移
py manage.py migrate
Django 管理页面
- 首先,我们得创建一个能登录管理页面的用户。
py manage.py createsuperuser
- 配置好数据库管理员信息后启动开发服务器并打开浏览器,转到你本地域名的 "/admin/" 目录, -- 比如 "http://127.0.0.1:8000/admin/"就应该能看到django赠送的管理员登陆界面。
在django-admin中添加应用和其数据模型
配置mysite目录
setting.py
INSTALLED_APPS = [
'simpleui', # 更改 django-admin 默认ui
'multiselectfield', # 复选框
'app.apps.SuitConfig', # 此处是添加的应用 app/apps.py 中的生成的config的类名及路径
...
]
# 语言
LANGUAGE_CODE = 'zh-hans'
# 时区
TIME_ZONE = 'Asia/Shanghai'
# ALLOWED_HOSTS = [] # localhost:端口/
ALLOWED_HOSTS = ['*'] # 局域网模式 ip:端口/
DATABASES = {
# 我使用的是默认的 sqlite3
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
mysite/urls.py 配置路由
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('', admin.site.urls),
path('app/', admin.site.urls), # 应用名我也转发到 admin
]
配置 加入的应用 app为您添加的应用名
app/apps.py
class ****config(AppConfig):
# 应用重命名(在前端汉字显示)
verbose_name = u"××××信息管理应用"
...
app/models.py 建立数据模型
from multiselectfield import MultiSelectField # 外部引入的复选框功能,记得添加到setting
class Data_A(models.Model):
name = models.CharField(max_length=50, verbose_name='姓名')
phone = models.CharField(max_length=20, verbose_name='电话')
....
def __str__(self):
return self.name
class Meta:
verbose_name = '*组信息'
verbose_name_plural = verbose_name
app/admin.py 注册数据模型
from django.contrib import admin
from django.http import HttpResponse
from .models import Data_A # 所有数据模型需要引入
from openpyxl import Workbook # 用于实现导出Excel功能
# 修改站点头和标题
admin.site.site_header = '欢迎使用×××信息管理系统'
admin.site.site_title = '×××信息管理系统'
# 开始注册数据模型
@admin.register(Data_A)
class Data_A_Admin(admin.ModelAdmin):
list_display = ('name', 'phone',) # 选择展示的字段
list_filter = ['name',] # 添加过滤器
search_fields = ['name'] # 添加搜索依据
list_per_page = 10 # 每页最多记录
actions = ["export_as_excel", ] # 此处添加自定义功能
def export_as_excel(self, request, queryset):
# 实现了 导出excel的重用
return ActionFunctions.export_as_excel(self, request, queryset)
export_as_excel.short_description = "导出为Excel文件" # 自定义功能的前端命名
# 自定义通用于所有数据模型的action的 工具类,建议所有方法定义为 静态方法,不必经实例调用
class ActionFunctions(object):
# 导出为 Excel功能
@staticmethod
def export_as_excel(self, request, queryset):
meta = self.model._meta
field_names = [field.name for field in meta.fields]
response = HttpResponse(content_type='application/msexcel')
response['Content-Disposition'] = f'attachment; filename={meta}.xlsx'
wb = Workbook()
ws = wb.active
ws.append(field_names)
for obj in queryset:
for field in field_names:
data = [f'{getattr(obj, field)}' for field in field_names]
row = ws.append(data)
wb.save(response)
return response
# 更多功能
@staticmethod
def f(self):
pass
Django项目服务器部署策略
在本地机器部署服务
内网ip映射
由于考虑到直接暴露本地机器ip地址的安全问题,需要对ip地址进行域名的映射。
方法:
- 花生壳 : 对本地ip进行映射和隐藏
- holer : 同上,有点费劲
- 其他....
ip映射完毕后就可以在公共网路,通过访问其公网ip或者域名比较安全的访问了
在github或者码云使用其page服务托管静态首页
需求:
花生壳等工具提供的域名比较乱,比较难以记忆,通过静态页面做个项目展示和入口
方法
- 以您项目的名称为账户名创建一个 github 或 gitee 账户
- 在上述平台申请一个免费的page服务,就获得了一个容易记忆的免费域名
- 在其仓库中上传静态首页 index.html 或者 index.md 及相关css/js等文件
- 静态首页中可以编写一些您项目相关的介绍和使用文档等等
- 在项目静态首页中添加花生壳中django-admin服务的域名,作为进入管理系统的入口
最后
如果项目是企业级规模的,还是在Linux等服务器上配合 Nginx 等工具进行部署,不能使用django自带的服务器。项目上线 需要修改 setting.py中的 DEBUG 为 False
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
这篇仅仅是基于 django 赠送的 admin ,做了一些修改和改造、部署。快速体验了django的后台系统,可以用于一般的数据增删改查需求场景。并未对django和前后端做更深入的探讨。

浙公网安备 33010602011771号