1 需求

现有的业务数据需要经常被展示,所以选择django作为展示工具。只需要使用django自带的admin app,然后对现有数据库进行建模就可以搞定。

2 代码

settings:

DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# },
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
},
'testconfig': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'config',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
} DATABASE_ROUTERS = ['sqlsite.dbrouter.AppRouter']
DATABASE_APPS_MAPPING = {
# example:
#'app_name':'database_name',
'app': 'testconfig',
'admin': 'default',
'auth': 'default',
'contenttypes': 'default',
'sessions': 'default',
}
#配置两个sql,第一个是dj自用,第二个是用于连接展示库
#配置db路由,由AppRouter进行配置
#db映射,将app映射到testconfig,dj自带app映射到default

  

dbrouter.py(和settings同目录)

from django.conf import settings
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING class AppRouter:
def db_for_read(self, model, **hints):
if model._meta.app_label in DATABASE_MAPPING:
return DATABASE_MAPPING[model._meta.app_label]
return None def db_for_write(self, model, **hints): if model._meta.app_label in DATABASE_MAPPING:
return DATABASE_MAPPING[model._meta.app_label]
return None def allow_relation(self, obj1, obj2, **hints): db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
if db_obj1 and db_obj2:
if db_obj1 == db_obj2:
return True
else:
return False
return None def allow_syncdb(self, db, model): if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(model._meta.app_label) == db
elif model._meta.app_label in DATABASE_MAPPING:
return False
return None def allow_migrate(self, db, app_label, model_name=None, **hints):
if db in DATABASE_MAPPING.values():
return DATABASE_MAPPING.get(app_label) == db
elif app_label in DATABASE_MAPPING:
return False
return None
#这个文件直接cp到任何项目都可以,不用改

  

3 生成数据库模型

 python3 manage.py inspectdb --database=testconfig > app/models.py
#可以将现有库testconfig 的模型生成到models.py
#这个功能非常方便,不再需要自己去做模型
#最后在models.py里添加admin的注册功能,就可以使用admin管理先有库

  

4 bug处理

4.1

admin多表中字段的显示,如果字段太长,它不换行,要换行显示

base.css:

/* TABLES */

table {
border-collapse: collapse;
border-color: #ccc;
word-wrap: break-word;
word-break: break-all;
}

  

4.2

有个数据库连接报错:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTE。原因是版本低,为5.1。另一个5.6的就不会出现问题。

解决办法:修改settings里该mysql配置的参数

'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'isolation_level':None
},
#在options里设定事务隔离级别为None

  

4.3

取回的数据中文乱码,中文写入失败

由于线上表编码为latin1,所以暂时无解。

4.4

使用admin修改字段时,提示字段必须填入内容

解决办法:在models中的表结构中。在字段里加入,blank=True,意思是可以在django层面允许空。

然后migrate,重启服务。

 

参考

https://www.cnblogs.com/zhangxinqi/p/9094953.html

https://www.jianshu.com/p/04cd9d4f67a2

最新文章

  1. JDBC 详解(转载)
  2. PYTHON文件操作(二)
  3. jsonp使用,spring4.x对jsonp的支持
  4. MySQL找回管理员密码
  5. 将ecshop中的session机制重写,从DB移植到Memcache中去
  6. Linux的read命令
  7. 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类
  8. android实现文本复制到剪切板功能(ClipboardManager)
  9. [整理]MongoDB 经常使用命令总结
  10. 学号:201621123032 《Java程序设计》第9周学习总结(
  11. codeforces131D
  12. springboot秒杀课程学习整理1-5
  13. 【学习】数据规整化:清理、转换、合并、重塑(续)【pandas】
  14. 最优化方法:共轭梯度法(Conjugate Gradient)
  15. python 千位分隔符,
  16. Linux-mail设置
  17. 2018.10.19 NOIP训练 游戏问题(分组背包)
  18. 关于Haxe3新特性“内联构造方法”的解释
  19. C++ 判断
  20. 学习Android开发看那些书好?

热门文章

  1. Docker容器的网络连接:
  2. [HTML & CSS] HTML和CSS基础知识
  3. 【CQ18高一暑假前挑战赛2】标程
  4. SPOJ:Another Longest Increasing Subsequence Problem(CDQ分治求三维偏序)
  5. Dom4J 解析xml ,类查询
  6. C++之引用&的详解
  7. Activity参数传递
  8. spark运行模式之一:Spark的local模式安装部署
  9. linux中的条件变量
  10. 微信小程序 设置宽度是100%,然后图片能成为正方形的方法。小程序按屏幕比例的正方形