目录
- 对django框架的内置功能的修改
- 导入导出模块
- 超级用户权限修改了解
- 修改登录界面方法
- 安装mysqlclient 性能优化,比pymysql模块更好
- 报错 django.db.utils.OperationalError: (2026, 'SSL connection error: unknown error number')
- 静态文件管理
- js问题 - onchange 和 onclick 等等以及其他的触发失效奇葩 bug
- 参考链接
测试环境:
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=Tru
e ,那么你就要小心了,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
标签来说,问题不大,但是但是,如果是 onchange
或 onclick
等其他的特殊属性是这种颜色提醒,那么就绝对有问题了,但是最让人纳闷的是,明明看起来没错的代码,实际却会无法生效,触发浏览器弹窗没反应。
这个是js前端测试过程中比较麻烦的问题了,一点报错信息都不会自动给出相应的报错代码位置提醒,需要手动console.log()
。
后面发现出现onchange
和 onclick
触发事件都是我复制别人代码过来的,想必应该有一点未知的原因在里面搞怪,所以后面就删除了这些触发事件,重新输入 onchange
和 onclick
事件,等pycharm 软件 会自动补全 onchange
和 onclick
时,就不会再次显示这个问题了,黄颜色警醒终于消失了,js 代码也终于生效了,触发事件弹窗测试也成功了。
参考链接
django项目开发部署完整案例【最终效果展示】【源码】【simpleui】【增删改查】 自定义图标
pymysql与MySQLdb(mysqlclient)性能对比
Django使用MySQL数据库出现的问题–mysqlclient库的安装