Django开发中常用命令以及常见问题汇总
目录
2、cannot import name 'password_reset_confirm'
3、django.contrib.auth.views import login
4、render() got an unexpected keyword argument 'renderer'
5、django.db.utils.InternalError
8、Xadmin 报错 'MIDDLEWARE_CLASSES'
一、Python虚拟环境
安装python3,升级pip3
sudo pip3 install --upgrade pip
安装 virtualenv
sudo pip install virtualenv
安装 virtualenvwrapper, Virtaulenvwrapper是virtualenv的扩展包,可以更方便地新增,删除,复制,切换虚拟环境。
sudo pip install virtualenvwrapper
接下来创建一个文件夹,用来存放所有的虚拟环境
mkdir ~/.virtualenvs
在~/.bashrc下添加环境变量
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
然后切换到 .virtualenvs目录下
cd .virtualenvs/
创建一个或者多个虚拟环境 env1
mkvirtualenv env1
列出虚拟环境
lsvirtualenv -b
切换虚拟环境
workon env1
查询环境安装了哪些包
lssitepackages
退出虚拟环境
deactivate
删除虚拟环境
rmvirtualenv env1
二、Django使用mysql
在settings.py中修改DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #数据库引擎
'NAME': 'test', #数据库名
'USER': 'root', #用户名
'PASSWORD': 'root', #密码
'HOST': '', #数据库主机,默认为localhost
'PORT': '', #数据库端口,MySQL默认为3306
'OPTIONS': {
'autocommit': True,
},
}
}
在__init__.py中添加
import pymysql
pymysql.install_as_MySQLdb()
三、Django改为中文以及时区
在settings.py中修改以下代码
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
常见问题
1、django跨域的时候报错
错误提示:
(corsheaders.E013) Origin '127.0.0.1:8080' in CORS_ORIGIN_WHITELIST is missing scheme or netloc
HINT: Add a scheme (e.g. https://) or netloc (e.g. example.com).
解决方法:
报这个错误意思是自己跨域的时候地址写错了,地址需要加上http://
'http://127.0.0.1:8080',
'http://localhost:8080',
2、cannot import name 'password_reset_confirm'
错误提示:
cannot import name 'password_reset_confirm'
解决方法:
from django.contrib.auth.views import PasswordResetForm
3、django.contrib.auth.views import login
错误提示:
ImportError: cannot import name 'login' from 'django.contrib.auth.views'
解决方法:
from django.contrib.auth import login
4、render() got an unexpected keyword argument 'renderer'
错误提示:
render() got an unexpected keyword argument 'renderer'
解决方法:
找到这一行,把“renderer = self.form.renderer”注释掉
5、django.db.utils.InternalError
错误提示:
django.db.utils.InternalError: (1060, "Duplicate column name 'cooperation_period'")
解决方法:
错误的主要原因是数据库中已经含有相应的字段了,但是在你makemigrations的时候还记录了需要增加这个字段(主要是你可能删除过migrations这个文件夹里面的内容)
将你存在的字段名,在migrations文件夹中注释掉,再migrate
6、关联关系ForeignKey引发的错误
错误提示:
提示缺少参数on_delete
解决方法:
凡是出现关联关系字段的地方全部加上 on_delete=models.CASCADE , 如下图所示:
7、模块包名称合并修改引发的错误
错误提示:
ModuleNotFoundError: No module named 'django.core.urlresolvers'
解决方法:
from django.core.urlresolvers import NoReverseMatch, reverse
# 修改为:
from django.urls import NoReverseMatch, reverse
8、Xadmin 报错 'MIDDLEWARE_CLASSES'
错误提示:
AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
解决方法:
# 将xadmin\plugins\language.py 中的
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:
# 修改为:
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE:
# 最后运行:
python manage.py makemigrations # 创建迁移数据文件
# 再运行:
python manage.py migrate # 迁移数据库
9、xadmin报错 'QUERY_TERMS'
错误提示:
ImportError: cannot import name 'QUERY_TERMS' from 'django.db.models.sql.query'
解决方法:
# django2.1.1版本将xadmin\plugins\filters.py文件中的
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
# 修改为
from django.db.models.sql.query import LOOKUP_SEP, Query
# 在Django2.0版本中把
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
# 修改为:
from django.db.models.sql.query import LOOKUP_SEP
from django.db.models.sql.constants import QUERY_TERMS
10、django设置msyql引擎出错
错误提示:
django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")
解决方法:
# django连接数据库时,配置
"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}
11、django提示缺失mysqlclient
错误提示:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
解决方法:
# 找到site-packages/django/db/backends/mysql/base.py,注释掉下面的两行代码
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
12、AttributeError: 'str' object has no attribute 'decode'
错误提示:
AttributeError: 'str' object has no attribute 'decode'
解决办法:
# 找到/site-packages/django/db/backends/mysql/operations.py
query = query.decode(errors='replace')
# 修改为
query = query.encode(errors='replace')