【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变量定义时,添加上面命令中所示的键值对。 
这里写图片描述

 

posted @ 2017-08-02 14:29  丰study  阅读(398)  评论(0)    收藏  举报