Windows 10 - Django + simpleui项目实战 - 详细总结 导入导出-权限修改-修改登录界面-数据库优化-js触发事件失效奇葩问题

测试环境:

Windows 10
Anaconda 3
python 3.7
django-simpleui 2022.7.29
django-import-export 2.8.0
mysqlclient cp37 64 whl
mysqlclient 1.4.6

对django框架的内置功能的修改

导入导出模块

在这里插入图片描述
创建导入导出接口文件 resource.py,内容如下

from import_export import resources
from .models import Test


class TestResource(resources.ModelResource):
    """
        导入导出接口配置文件
    """
    # 此处可写方法以添加更多功能
    class Meta:
        model = Test
        # fields内的模型字段会被导入导出, exclude内的会被排除在外,如果都不写,默认为模型中的全部字段都要包含。
        # fields=[
        #     'job_num',
        #     'head_class',
        #     'name',
        #     'employ_src',
        #     'gender',
        #     'id_card_num',
        # ]
        # excloud = (
        #     'first_diploma',
        #     'home_address',
        #     'honor_award',
        # )
        # export_order(自定义) 选项设置导出字段的显式顺序,没在这里规定的就按默认顺序排在后面(不能只写一个)(导入不用管顺序)
        export_order = ('id', 'name')
        # 下面规定联合主键,决定是update还是create,可以避免重复导入相同的记录
        # import_id_fields = ['phone', 'id_card_num']

使用方法如下:在想要实现导入导出的app内的admin.py文件内使用该接口文件
在这里插入图片描述
举例内容如下:

from django.contrib import admin
from datadisplay.models import Test
# 取一个插件内的管理器
from import_export.admin import ImportExportModelAdmin
# 导入刚刚写好的Resource 导出接口文件
from .resource import TestResource

# Register your models here.
# 重写一个管理类,并绑定到模型类

class TestAdmin(ImportExportModelAdmin):
        # 对接资源类
        resource_class = TestResource   # 导入导出接口
        list_display = ['name', 'age']

admin.site.register(Test,TestAdmin)

效果如下:
在这里插入图片描述

Django学习(10)后台批量导入导出import-export

超级用户权限修改了解

无论怎么都不可能使用权限分组的方法,让一个超级用户使用不了其他用户组的权限功能,所以这样子就会看起来很奇怪,比如一个公司里有财务部,销售部,技术部,那么超级用户就可以用到财务部、销售部、技术部的功能模块,所以看起来超级用户的后台管理界面就很奇怪。

修改登录界面方法

simpleui 的 admin.py 文件内的修改

admin.site.site_header = '***系统'  # 设置登录界面header
admin.site.site_title = '***系统'          # 设置浏览器的 title

在这里插入图片描述

安装mysqlclient 性能优化,比pymysql模块更好

推荐原因:

pymysql:
纯python语言编写,速度比mysql-connector快,在调用pymysql.install_as_MySQLdb()后,几乎完全兼容MySQLdb
mysqlclient:
django 框架推荐连接库,基于C编写,速度快,是MySQLdb的一个fork,最兼容MySQLdb

数据量大用MySQLdb(mysqlclient),数据量小(1w行以下)用pymysql

问题描述:项目后台API响应过慢,将近7s,严重影响体验
在这里插入图片描述
嗯…18W数据也不多,两者执行时间却相差8倍有余。

windows安装方法:(请看链接下载)
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

这里我用的python版本为 3.7,所以选择 cp37的64位的 whl 文件,想必现在32位的电脑应该很少了吧。
在这里插入图片描述
点击链接下载 .whl 文件

下载完成后,复制whl 文件的绝对路径,使用 pip install 命令 (将含有绝对路径的whl文件复制)
在这里插入图片描述
在这里插入图片描述

报错 django.db.utils.OperationalError: (2026, ‘SSL connection error: unknown error number’)

解决链接:
解决Windows下django.db.utils.OperationalError: (2026, ‘SSL connection error: unknown error number‘)问题

my.ini 文件内容如下:添加

[mysqld]
skip_ssl  # 忽略ssl

完整内容如下:

[mysql]

# 设置mysql客户端默认字符集
default-character-set=utf8 

# 路径:C:\ProgramData\MySQL\MySQL Server 8.0
[mysqld]
skip_ssl  # 忽略ssl

[mysqld]

#设置3306端口
port = 3306 

# 设置mysql的安装目录
basedir=D:\YHX\Programs\Database\mysql-8.0.30-winx64

# 设置mysql数据库的数据的存放目录
datadir=D:\YHX\Programs\Database\mysql-8.0.30-winx64\data

# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

重启服务,没法用net stop mysql / net start mysql 命令
只能使用计算机管理 - 服务和应用程序 - 服务- MySQL - 右键点击重启服务

静态文件管理

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "common_static")
]
STATIC_ROOT = os.path.join(BASE_DIR, "static"")  

特别注意:
STATICFILES_DIRS 配置,相当于 settings.py文件内 DEBUG=True 时的 默认静态路径,也就是说,如果你是在开发环境下,即配置是 DEBUG=True ,那么你就要小心了,Django 特别讲究,在测试环境下时,就默认把测试环境下的静态文件都放在 STATICFILES_DIRS 路径下,在生产环境下,即 settings.py 文件内的 DEBUG=False ,那么你就要注意了,本来在 STATICFILES_DIRS 路径下的所有的静态文件,都应该放到 STATIC_ROOT 路径下,这里生产环境默认的静态文件路径,所以呢,Django 框架极为讲究,静态文件的路径分为测试版的和生产版的两种模式,所以特别要记住的一点是,collectstatic 命令,如果是要系统上线了,那么就要注意的一点是,使用这个 collectstatic 命令,将所有的在测试版的静态文件都拉到 STATIC_ROOT 这个生产环境的默认静态文件路径,这样就后面就不会奇怪,为什么我的静态文件都不见了之类的,笔者就是碰到了,对这 Django 的静态文件配置理解不深。


回头补充:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]
STATIC_ROOT = os.path.join(BASE_DIR, "static"")  

这个配置是可以的,只不过测试阶段和开发阶段到生产上线阶段我们使用的是 STATICFILES_DIRS,但是但是生产上线阶段,我们是将 STATICFILES_DIRS 给注释掉,使用 STATIC_ROOT 集成所有的 app 目录下的静态文件。
开发阶段:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]
#STATIC_ROOT = os.path.join(BASE_DIR, "static"")  

生产阶段:

STATIC_URL = '/static/'
#STATICFILES_DIRS = [
#    os.path.join(BASE_DIR, "static")
#]
STATIC_ROOT = os.path.join(BASE_DIR, "static"")  

js问题 - onchange 和 onclick 等等以及其他的触发失效奇葩 bug

有次不知道是什么问题,明明 onchange 字符没错吧,但在 pycharm 编程软件里,就是会有黄色的提醒颜色在,颜色类似如下:
在这里插入图片描述
一看到这种颜色,多少会有一点点瑕疵问题,但没事,对于 input标签来说,问题不大,但是但是,如果是 onchangeonclick 等其他的特殊属性是这种颜色提醒,那么就绝对有问题了,但是最让人纳闷的是,明明看起来没错的代码,实际却会无法生效,触发浏览器弹窗没反应。

这个是js前端测试过程中比较麻烦的问题了,一点报错信息都不会自动给出相应的报错代码位置提醒,需要手动console.log()
后面发现出现onchangeonclick 触发事件都是我复制别人代码过来的,想必应该有一点未知的原因在里面搞怪,所以后面就删除了这些触发事件,重新输入 onchangeonclick 事件,等pycharm 软件 会自动补全 onchangeonclick 时,就不会再次显示这个问题了,黄颜色警醒终于消失了,js 代码也终于生效了,触发事件弹窗测试也成功了。

参考链接

django项目开发部署完整案例【最终效果展示】【源码】【simpleui】【增删改查】 自定义图标

pymysql与MySQLdb(mysqlclient)性能对比

Django使用MySQL数据库出现的问题–mysqlclient库的安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值