Django 学习 - 报错/坑爹版本系列


引言

使用了 python 才发现 iOS - xcode 编程是多么的幸福。几乎啥都不用管。
而 python,语法都还 OK,两个大版本的跨度,一堆包版本不同;而且安装第三方包后,本地的文件还可能被改掉,遇到导入第三方库,经常一晚上啥也没做,就调版本矛盾去了。
最近在跟着慕课网学习 django,下面主要介绍遇到的坑。

慕课网 django 教程推荐下:https://coding.imooc.com/class/78.html


1、目前最佳环境

我的最佳django 项目版本包(截止到2018-06-12 23:46,如果后续有问题,概不负责哦)

python 2.7 
$ pip list
Package             Version
------------------- -------
decorator           4.3.0  
Django              1.9    
django-crispy-forms 1.7.2  
django-formtools    2.1    
httplib2            0.9.2  
MySQL-python        1.2.5  
Pillow              5.1.0  
pip                 10.0.1 
pytz                2018.4 
setuptools          39.2.0 
six                 1.11.0 
validator           2.0.6  
validators          0.12.2 
wheel               0.31.1 
xadmin              0.6.1 

2、报错 - cannot import name RadioFieldRenderer

我的版本是

python 2.7 

$ pip list


Package             Version
------------------- -------
Django              1.11.13
django-crispy-forms 1.7.2  
django-formtools    2.1    
httplib2            0.9.2  
MySQL-python        1.2.5  
Pillow              5.1.0  
pip                 10.0.1 
pytz                2018.4 
setuptools          39.2.0 
wheel               0.31.1 
xadmin              0.6.1  

解决方法:

pip install  django==1.9

3、报错 - No module named validators

版本信息

python 2.7 

$ pip list
Package             Version
------------------- -------
Django              1.9    
django-crispy-forms 1.7.2  
django-formtools    2.1    
httplib2            0.9.2  
MySQL-python        1.2.5  
Pillow              5.1.0  
pip                 10.0.1 
pytz                2018.4 
setuptools          39.2.0 
wheel               0.31.1 
xadmin              0.6.1  

解决方法:
删除 app –> migrations 下的 0001_initial.py 类型的表;
不行的话,全部删干净。

升级到 python 3.6 未必能解决这个问题


4、报错 - The INSTALLED_APPS setting must be a list or a tuple

详情:

django.core.exceptions.ImproperlyConfigured: The INSTALLED_APPS setting must be a list or a tuple. Please fix your settings.

解决方法:
检查下你的 INSTALLED_APPS 列表,列表应使用 ()、[]括号,不能用{}
可能会被被误变更为{},就导致这个问题


5、报错 - 'WSGIRequest' object has no attribute 'user'

参考:
https://blog.csdn.net/xiongjiezk/article/details/53220302

修改 settings.py 中配置为

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

注意,pip 新版本的时候,项目settings 里面的方法名、方法内容都可能会被替换掉。


6、报错 - AttributeError: type object 'UserProfile' has no attribute 'USERNAME_FIELD'

详情:


Error fetching command ‘createsuperuser’: UserProfile has no field named ‘

7、报错 - Apps aren't loaded yet

大部分原因是引用问题

可以检查下

1、django 主程序 的 manage.py 中是否引用了 app 的文件。
2、django里App的init.py 文件中千万不要引用 models,同理也不要引用同级的views和urls。


8、报错 - python No migrations to apply

解决方法
https://blog.csdn.net/monkey_yang_zb/article/details/79215352

8.1、删除该app名字下的migrations文件。
不要删除 migrations 文件夹。
如果删除了,赋值一个过来,再次运行 makemigrations;

8.2、进入数据库,找到django_migrations的表,删除该app名字的所有记录。
8.3、再次运行 makemigrations 和 migrate


9、报错 - prompt-toolkit 1.0.15 has requirement six>=1.9.0, but you'll have six 1.4.1 which is incompatible.

解决方法:
pip install six –user -U
pip install ipython –user -U


10、报错 - django.db.utils.OperationalError: (2002, “Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)”)

检查发现 系统偏好与设置中,mysql 也没有开启。navicat 也连不上。

终端输入
mysql -u root -p

同样提示
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


解决方法
$ mysql.server start

不过偏好设置中的 mysql 还是没开启。


试错

网上其他方法:
$ sudo mysqld_safe

2018-06-13T14:51:53.6NZ mysqld_safe Logging to '/usr/local/var/mysql/local.err'.
2018-06-13T14:51:53.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2018-06-13T14:51:53.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/local.pid ended

有人成功了,我多了一行,不知道是不是这个原因并没有链接成功。你们可以试试。


猜你喜欢

转载自blog.csdn.net/lovechris00/article/details/80673085