Django开发中问题和报错集合
記錄django項目開發過程中的遇到的問題,導致原因和已經奏效的解決方法
常見報錯UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbc in position 852: invalid start byte
這個問題在一些電腦上做django開發時經常出現
要么是py文件運行是就報這個類似的無法解碼的問題,要么就是運行服務器后臺添加數據保存時報這個錯誤
現總結了以下一些可能的原因和解決方法:
可能的原因:
- 1.GBK編碼的文件(不一定是py文件)中輸入了的漢字與django運行時的解碼方式utf-8不一致;
- 2.在文件開頭加上# -*- coding:utf-8 -*-,這個方法只對單個文件有效,而且加過一次后再去掉也仍然奏效
- 3.電腦命名出現了漢字(在設置中修改成英文即可,這是能搜索到的普遍的解答)
解決方法:
- 要么刪除漢字,要么修改轉換一下編碼方式將原文件覆蓋→用pycharm右下角的編碼轉換功能修改
上述編碼錯誤還可能導致搜索功能的作用失效
使用python的全文檢索框架幫助搜詞時無法匹配到目標對象(你傳入的page對象到模板中始終為空),這可能是因為分詞txt文件出現了上述的編碼沖突:
-
比如:templates/indexes/app1目錄下的Model_text.txt的出現了漢字(注釋也算)與django用的utf-8沖突
-
解決方法就是前面所說的修改編碼方式為utf-8并重新加載文件
終端執行命令(如遷移python manage.py makemigrations)時報錯:RuntimeError: Model class apps.xxx.xxx.XXXdoesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.
可能的原因:
- 檢查models里面的外鍵關聯對象名稱是否有錯,關聯的對象名稱格式應該是【app名.類名】(中間沒有models.py文件名)
解決方法:
- 如上原因所示,關聯的對象名稱格式應該是【app名.類名】
執行遷移命令python manage.py makemigrations時報錯
1.django.db.utils.OperationalError: (2003, “Can’t connect to MySQL server on ‘1xx.xx.xx.xxx’ ([WinError 10061] 由于目標計算機積極拒絕,無法連接。)”)
可能的原因:
- 檢查服務器上MySQL服務程序是否啟動,(用PS指令檢查程序)啟動(linux):service mysql start
- 檢查MySQL是否有授予訪問權利給當前發起連接的主機IP,查看授權情況:show grants for user@1xx.xx.xx.xx(user是你在django配置中設置的數據庫登錄賬號),不想查看,可直接執行授權操作
解決方法:
- 授權:GRANT ALL PRIVILEGES ON `test`.* TO 'user'@'1xx.1xx.xx.xx' IDENTIFIED BY 'password' WITH GRANT OPTION;其中test是名為test數據庫(可理解為子庫?),不輸入’test’則是授權所有庫,后面的user、ip和password要根據實際情況輸入,示例:
如果出現報錯ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
請往下查看解決方法:
數據庫指定IP主機授權時報錯ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
原因:
- 原因是密碼太短,密碼安全策略要求過高
解決方法:
-
查看當前的密碼安全策略show variables like "%validate%";
-
修改密碼安全策略,修改密碼長度為4位:set global validate_password_length=4;
-
修改安全等級為low(0):set global validate_password_policy=0;
-
再次查看密碼安全策略:show variables like "%validate%";
-
再次對指定的IP主機授權:GRANT ALL PRIVILEGES ON `test`.* TO 'user'@'1xx.1xx.xx.xx' IDENTIFIED BY 'password' WITH GRANT OPTION;返回OK:
djangoValueError: Unable to configure handler ‘mail_admins’
可能的原因:
- 可能是剛剛在源碼因為復制(或修改)了一些東西(復制粘貼經常會報錯,可能跟編碼有關)
解決方法:
- 改成手寫,或者不修改源碼,重啟服務器python manage.py runserver
Reverse for ‘index’ with arguments ‘(3,)’ not found. 1 pattern(s) tried: [’$’]
可能的原因:
- 反向解析的名字錯誤(不一定是拼寫錯誤,可能是你指向的url的別名錯誤)
解決方法:
- 根據報錯的路由尋找模板中錯誤的反向解析
SyntaxError at/xx/xx;invalid syntax Syntax(redis.py, line 815)
可能的原因:
- redis源碼中有關鍵字與python的沖突
解決方法:
- 根據提示定位錯誤處,進入源碼將所有該關鍵字替換為一個不沖突的名字
configparser.NoOptionError: No option ‘connect_timeout’ in section: ‘config’
可能的原因:
- 給出的配置文件的路徑錯誤,使用了相對路徑
解決方法: - 改成絕對路徑
如何解決from user.models import User類似的紅色下劃波浪線報錯:
將apps package標記為資源根目錄,在apps目錄內導入其他py文件時會從apps下開始尋找
ImportError: cannot import name ‘six’ from ‘django.utils’
原因:
- django3six單獨作為了一個包,而不是存在django.utils目錄下
解決方法:
-
方法一:直接進入虛擬環境site-packages中將安裝的six.py復制到同目錄下django目錄下的utils目錄中
-
方法二:將from django.utils import six的語句全都改成import six
解決上面問題之后可能會出現錯誤:**ImportError: cannot import name ‘python_2_unicode_compatible’**原因同上
解決方法:
- 根據提示找到出錯的模塊,將出錯的導入低嗎改為from six import python_2_unicode_compatible(site-pakage下的six沒有刪除或移動到其他位置)或from django.utils.six import python_2_unicode_compatible(six.py移動到了django.utils目錄下)
進入文件/home/image/Desktop/pyenv/fresh/lib/python3.6/site-packages/haystack/inputs.py修改為
數據遷移常見報錯之 django.db.utils.InternalError: (1060, “Duplicate column name ‘addr_id’”)
問題截圖(原因):
- 遷移的外鍵名與數據庫中的列重復,遷移過的外鍵更改后又執行遷移,有時候無法避免,因為修改了一些數據,其報錯效果類似下圖新建一個外鍵字段一樣:
解決方法:
- 從數據庫刪除報錯的那一欄,使用navicat找到對應表,右鍵進入設計表模式,找到外鍵執行刪除 (注意欄位【刪除時】要改成級聯CASCADE),on_delete=CASCADE代表刪除主表時,關聯的外鍵也會刪除
然后記得刪除與之相關聯的不需要的欄位
InternalError at /(1054, “Unknown column ‘banner_list.foreign_spu_id’ in ‘field list’”)
可能的原因:
- 增加了新的外鍵,但數據庫表中沒有這個外鍵欄
解決方法: - 從數據庫手動增加這個外鍵
InternalError at /xxx/xxx/xxx(1364, “Field ‘foreign_spu_id’ doesn’t have a default value”)
原因:
- 就是外鍵缺一個默認值(不知為什么外鍵需要一個默認值,而且也并沒有強制要設定這個參數)
解決方法:: - 想一個默認值,添加默認值參數(default=‘xxx’),或者給外鍵設置參數可以為空(null=True)
總結
以上是生活随笔為你收集整理的Django开发中问题和报错集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内联_JAVA中的内联函数
- 下一篇: 总谐波失真计算公式_新能源汽车技术|车用