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服务托管静态首页

需求:

花生壳等工具提供的域名比较乱,比较难以记忆,通过静态页面做个项目展示和入口

方法

  • 以您项目的名称为账户名创建一个 githubgitee 账户
  • 在上述平台申请一个免费的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和前后端做更深入的探讨。

posted @ 2020-07-20 21:15  puntsok  阅读(49)  评论(0)    收藏  举报