目錄
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')