【Django】python3.5 django1.10 demo 遇见的问题
1.django新建项目时遇见了关于_sqlite3的问题:
File "/usr/local/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 39, in <module>
raise ImproperlyConfigured("Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s" % exc)
django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3'
解决:
yum install sqlite-devel.x86_64
然后重新编译Python
2.启动项目时报以下信息:
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.
解决,描述得很清楚,运行以下命令就ok:
python manage.py migrate
3.访问时报错:
Invalid HTTP_HOST header: ‘xxx.xxx.xx.xxx:8000’. You may need to add ‘xxx.xxx.xx.xxx to ALLOWED_HOSTS.
在setting.py中把xxx.xxx.xx.xxx 加入到ALLOWED_HOSTS中就ok了
4.连接MySQL的时候报错
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 28, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
解决:
方法一(失败了):
首先安装mysql模块 pip3 install pymysql3
然后修改init.py文件加入:
import pymysql
pymysql.install_as_MySQLdb()
但是使用的时候发现又报错:
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 31, in <module>
from MySQLdb.converters import Thing2Literal, conversions # isort:skip
ImportError: cannot import name 'Thing2Literal'
查了一下应该是pymysql3的版本不对
使用以下命令看版本信息:
python3 -c ‘import pymysql; print(pymysql.version)’
发现是0.5版的,最新版应该是0.7.9
方法二:
先卸载: pip3 uninstall pymysql3
然后:
$:wget https://pypi.python.org/packages/a4/c4/
c15457f261fda9839637de044eca9b6da8f55503183fe887523801b85701/PyMySQL-0.7.9.tar.gz#md5=bf82311ac2df4c43adad003a8c805b90
$:tar zxvf PyMySQL-0.7.9.tar.gz
$:cd PyMySQL-0.7.9
$:python3 setup.py install
5.使用数据库使用命令:python3 manage.py syncdb时报Unknown command: ‘syncdb’
解决:django1.9以后使用:python3 manage.py migrate
6.数据库表已存在,反向生成model.py
python manage.py inspectdb>models.py
提示:这种一般是在初始化项目之前做,不然的话会把django的系统表也会给反向生出来
7.两个表之间存在多个外键的时候,生成model之后,会报错:
HINT: Add or change a related_name argument to the definition for xxx or xxx]
解决办法:设置related_name
trigger = models.ForeignKey('Opt',models.DO_NOTHING,related_name='template_trigger_opt')
trigger_params = models.CharField(max_length=45, blank=True, null=True)
action = models.ForeignKey('Opt', models.DO_NOTHING,related_name='template_action_opt')
8.admin管理工具中生成的界面中,下拉菜单显示成Object
解决办法,修改model.py:
class User(models.Model):
email = models.CharField(max_length=45)
password = models.CharField(max_length=45)
name = models.CharField(max_length=45, blank=True, null=True)
后面加上
def str(self):
return self.name
如果 self.name 有可能为null,则加上str,不然会报类型转换异常:
def str(self):
return str(self.name)
9.admin管理工具中生成的界面,显示多个字段
解决办法:
修改admin.py
添加如下代码
class UserAdmin(admin.ModelAdmin):
list_display = (‘name’,’email’, ‘sex’,’city’,ctime’) # list
admin.site.register(User,UserAdmin)
注:一个model只能注册一次
MYSQL模块操作数据库
Django1.10默认使用的是mysqlDB模块来操作数据库,而该模块已不支持Python3,所以需要其他的方式连接数据库。 方式一:使用MySQL官方的mysql.connector模块 安装mysql.connector模块 #去mysql.com官网上下载包并解压 #cd到解压文件的根目录(该目录下应该有一个setup.py的文件) python setup.py install 据说还有另一个方式,我没有试过 pip install mysql-python 修改setting.py文件 DATABASES = { 'default': { 'ENGINE': 'mysql.connector.django', 'HOST':'数据库所在主机名', 'PORT':端口号, 'USER':'用户名', 'PASSWORD':'密码', 'NAME': '数据库名' } } 本人亲测后发现执行数据库同步命令会报错,但是不影响建表 python manage.py migrate 方式二:使用pyMsql模块 安装pyMysql模块: pip install pymsql 修改setting.py文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST':'数据库所在主机名', 'PORT':端口号, 'USER':'用户名', 'PASSWORD':'密码', 'NAME': '数据库名' } } 采用这种方式的话默认会掉哟个mysqlDB模块,由于没有该模块所以需要修改该配置文件所在目录下的__init__.py文件 import pymysql pymysql.install_as_MySQLdb() 再次执行方式一的数据库同步命令即可
问题:
django项目中,执行Python manage migrate时
WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode
解决:
在settings中,在DATABASES变量定义处下面添加
DATABASES['OPTIONS']['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"
或者在DATABASES变量定义时,添加上面命令中所示的键值对。

浙公网安备 33010602011771号