Django搭建学习笔记web应用程序【一】:OperationalError table learning_logs_topic has no column named text已解决

在学习《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键,会出现以下的错误。
图1
参考了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、当修改了项目模型后,创建数据库迁移
修改项目数据三部曲:

  • 修改models.py
  • 对应用程序调用makemigrations创建迁移
  • 调用migrate执行迁移。

先在项目目录启动终端,执行以下命令:

python manage.py makemigration learning_logs

【迁移创造成功时】
在这里插入图片描述
然后出现会依次出现上述两个提示。在1处输入1(千万要选择1丫,选2的话后续执行迁移的时候又会出现新的问题)。然后会提示你在2处选择输入,此时直接按Enter键

【如果在1处选2,就会出现迁移不能成功执行的问题】
在这里插入图片描述
【一些可能会出现的疑惑】为什么不在models.py里直接给date_added设置默认值?为什么不在2处直接进行设置?

  • 因为DateTimeField这玩意好像跟其他类不一样,要是没设置正确可能又要出很多问题。参自django数据库错误相关问题第一个问题。
    而且只是第一次多点两次,后面也不会继续出现这个问题了。

【应用程序下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的命令。

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值