在学习《Python编程从入门到实践》这本书的Django项目的时候,从开始的虚拟环境安装到初步建立项目,作为小白的我真是吃尽了苦头,遇到了超多的bug(软件版本更新太快了,旧书跟不上时代啊)。我先记录在这里,其中的原理现在还不是很清晰,但是可以分享给也要学习Django的朋友们,避免踩坑。
一、OperationalError at/admin/learning_logs/topic/add table learning_logs_topic has no column named text
先说最恼火的这个问题
在打开http://localhost:8000/admin/网址后,点击上图的add键,会出现以下的错误。
参考了stackoverflow上问题OperationalError, no such column. Django的几个高赞回答(也可以直接跳到步骤处~~),对执行命令做了几点修改。(前提是建立好了虚拟环境以及项目、数据库和应用程序。)
【Stack Overflow回答】
【执行下述操作时,先确定进行了以上操作。不要关闭这个窗口,打开另一个终端,切换到项目所在目录,然后创建应用learning_logs】
修改步骤:
1、修改应用程序learning_logs目录里的models.py
from django.db import models
# Create your models here.
class Topic(models.Model):
"""用户学习的主题"""
#在属性text的形参中添加了blank=True和default=''
text = models.CharField(max_length=200,blank=True, default='')
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回模型的字符串表示"""
return self.text
2、当修改了项目模型后,创建数据库迁移
修改项目数据三部曲:
先在项目目录启动终端,执行以下命令:
python manage.py makemigration learning_logs
【迁移创造成功时】
然后出现会依次出现上述两个提示。在1处,输入1(千万要选择1丫,选2的话后续执行迁移的时候又会出现新的问题)。然后会提示你在2处选择输入,此时直接按Enter键。
【如果在1处选2,就会出现迁移不能成功执行的问题】
【一些可能会出现的疑惑】为什么不在models.py里直接给date_added设置默认值?为什么不在2处直接进行设置?
【应用程序下migrations多了一个迁移产生的py文件】
【新产生的0002_auto_20191123_2010.py中给模型的date_added属性设置了默认属性】
3、执行迁移
同样在项目目录启动终端,执行以下命令:
python manage.py migrate
【最后一行出现OK了,就代表一切正常啦!!!】
到这里的话就可以去http://localhost:8000/admin/里愉快得添加主题啦~
4、添加主题
二、建立虚拟环境时出现Error:Command’[‘F:\software_work\Python work\small_project\learning_log\ll_env\Scripts\python.exe’,’-Im’,‘ensurepip’,’–upgrade’,’–default-pip’]’ returned non-zerep exit status 1. 以及UnicodeDecodeError:'utf-8’codec can’t decode byte 0xb5 in position 41: invalid start byte
【使用python -m venv ll_env时出现的错误】
【上述命令报错提示我没有安装venv模块后使用pip install --user virtualenv + virtualenv ll_env时的错误】
参照了前辈的一篇文章使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command ‘[‘D:\Development\Django\test\Scripts\python.exe’, ‘-Im’, ‘ensurepip’, ‘–upgrade’, ‘–default-pip’]’ returned non-zero exit还有Stack Overflow上的方法,使用方法如下,亲测有效。
同样,在终端切换到项目所在目录:
#将书中的命令
python -m venv ll_env
#如果没有安装模块venv,先安装模块,再执行下一行。安装好了的可以不管这一行跳过直接执行下一行的命令
pip install virtualenv
#改为
python -m venv --without-pip ll_env
【目录下出现ll_env文件夹,虚拟环境创建成功】
在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venv就会出现不能安装pip的错误,原因是Anaconda没有ensurepip。通过测试,如果不去在虚拟环境中安装pip,那么虚拟环境将使用默认的pip。
三、使用书中的django-admin.py startproject learning_log .命令不能成功创建项目
切换到项目所在目录,使用书中的命令:
django-admin.py startproject learning_log .
发现只是会在编辑器里自动弹出django-admin.py文件,而在项目文件夹里并没有发现所创建的项目learning_log文件夹。
参照搭建python django虚拟环境完整步骤详解里的步骤,发现只要稍微改一下就可以了,这真的是个天坑啊!
#去掉.py就正常了
django-admin startproject learning_log .
这坑不坑嘛
【还是在同一个项目文件的目录下,使用django-admin startproject appinventor创建的项目】
四、ImportError: Couldn’t import Django. Are you sure it’s installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
又一个坑,我感觉第一次安装Django就几乎遇到了所有的坑 orz --||
在核实Django是否正确创建项目的时候,执行以下命令的时候就出现了标题中的错误。(这一张的error traceback已经淹没在茫茫的命令行中了)
python manage.py runserver
参照manage.py“Couldn’t import Django”报错的问题解决,我出现这个的问题是在创建的虚拟环境时,没有导入之前下载的包,导致在环境下搜索不到Django。(还有其他可能会出现的问题,可自取)
核对虚拟环境的路径下Lib文件夹的site-packages中,是否有Django包,如果没有,就从Django的安装路径中复制粘贴过来。(再次温馨提示不要拖拽~)
【左边是我的虚拟环境下的site-packages,右边是我的安装路径site-packages】
拖完了Django的包后,我根据返回来的指示又粘贴过去两个包,才可以成功运行python manage.py runserver的命令。