疫情期间在家学习Django框架,期间遇到了不少的问题,以下是对Django框架学习的一些梳理。
Django框架采用MTV模式,是python的第三方库,M(Model)指模型、T(Template)指模板、V(View)指数据处理。
1、Django框架的安装
在Windows平台:运行cmd,执行pip install django命令就可以安装Django库
通过python -m django --version可以查看django的版本。
2、Django框架的开发步骤
Django框架的开发可以分为以下三步,
步骤一:创建一个工程,然后创建一个应用(APP)
步骤二:编写具体的功能
步骤三:运行服务器进行调试
其中步骤一和步骤三都是在cmd命令行下执行,步骤二编写具体的功能使用PyCharm进行编写,整个开发过程需要使用cmd命令行结合PyCharm
2.1 创建工程和应用
在cmd命令行下执行
django-admin startproject firstProject
,可以PyCharm可以看到刚刚新建的工程
2.2 创建app
通过cd命令进入工程目录 ,在工程目录下创建一个app,具体的功能编写都是在这个app中进行的
在cmd命令行下执行
python manage.py startapp newAPP
,创建一个APP
PyCharm下的工程目录更改:
2.3 具体功能的编写
一个工程目录下有这么多文件,具体的功能编写只需要关注以下几个文件
其中Model和View都已经有了我们还需要Template即模板,Template其实就是前台的网页(HTML、CSS、JS这些),Model对应的是后台数据库,View是中间的处理过程。
2.3.1添加Template
在app下选择新建文件夹,起名叫templates(约定俗成,也可以叫别的名字),前台的HTML网页都放在这个文件夹中。
然后打开setting.py文件,找到TEMPLATES,在DIRS下指定一下刚才的templates文件夹
其中第一个参数是固定的,第二个参数填写templates路径("工程名/templates")
2.3.2 创建模板(新建HTML网页)
在templates文件夹下新建一个HTML页面。页面中随便写点东西,这里假设写一个用户提交表单。其中第9行出现的 {% csrf_token %} 是Django框架自带一种加密方法,目的是防止你网站中的信息被盗用,所有表单中必须写这行代码。
2.3.3 对前台页面的数据处理
对数据的处理都是写在views.py文件中。这里定义了两个方法,第一个是用来在网页中显示模板,即将你的HTML页面显示出来。第二个方法是用来接受HTML页面中的数据并做出相应的处理。
2.3.4 创建本地路由
我们会发现在我的app中多了一个urls.py文件,这个是本地路由,生成app时并不自带需要自己创建。本地路由的作用是增加对views.py文件的指向,然后通过全局路由调用本地路由实现对views.py文件中的方法的调用。
2.3.5 调试
在cmd命令下,进入如manage.py 同级目录下执行如下命令,启动服务器。
python manage.py runserver
出现如图提示即启动服务器成功,将出现的IP地址复制到网页地址栏中即可查看自己的网站。
3、连接MySQL数据库(Django默认的是slqite3)
第一步:安装MySQL驱动,python3使用的是pymysql
在cmd命令下执行pip install pymysql即可安装MySQL驱动
第二步:配置setting.py文件,找到DATABASES
其中,ENGINE是数据库驱动,直接把原来的sqlite3改为mysql即可
NAME是数据库名
USER是数据库的操作用户,默认的是root
PASSWORD是数据库的密码
HOST是主机,填写‘localhost’或者‘127.0.0.1’都可以
PORT是端口号,默认3306
第三步:在setting.py文件同级目录下的__init__.py文件中添加两行代码
import pymysql
pymysql.install_as_MySQLdb()
经过亲自测试发现在python3.7+django3.0中不用添加
第四步:添加模型,在models.py文件中创建表
第五步:模型迁移,在cmd命令行下执行两条命令,由于我之前已经做过文件迁移,所以提示信息是这样的。(正确的可以参看这个链接:https://www.jianshu.com/p/6c320be944f2)
2.5 操作过程遇到的问题
问题1:MySQLdb._exceptions.OperationalError: (2059, )
其中会遇到的问题是,在生成迁移文件时(第一条命令),有的会出现一个异常:MySQLdb._exceptions.OperationalError: (2059,
百度了一下是因为mysql8.0密码加密的问题,MySQL8.0对用户的加密方式为caching_sha2_password,而django暂时不支持这种新增的加密方式,据说MySQL5.0不会出现这个问题。解决办法是在MySQL中执行以下两条命名:
alter user 'root'@'localhost' identified with mysql_native_password by 'yourpassword
flush privileges
然后重启django即可(原博文链接:https://www.cnblogs.com/yongqi-wang/p/agsgfs.html)
问题2:No changes detected
还有一个问题就是图中提示的“No changes detected”,百度给出的解决办法时在setting.py文件中添加app的注册
然后再次执行模型迁移,结果是这样的
问题3:多出的数据表
根据输出我们会发现,除了我们创建的数据表之外,还有其他十几个迁移数据,他们来自哪里呢?根据百度出的答案,在INSTALLED_APPS中,其中列出的其他一些应用也带有迁移功能,迁移管理命令默认情况下会为所有已安装的应用迁移。你可能以为这样不好,实际上当第一次进行模型迁移时最好所有应用都迁移,以确保数据库包含必要功能所必须的表,例如用户身份验证和会话。(以上来自连接:https://www.jianshu.com/p/574d368ab28c)
至此对整个数据库的连接就完成了,接着就可以写一些增删改查的功能啦。
4、增删改查功能
4.1添加用户
通过前台页面向数据库中提交数据,完成用户的添加。首先在templates文件夹下新建一个HTML页面
在views.py文件下完成数据的处理,编写添加用户的方法
完成本地路由和全局路由的关联。后面直接放最终完成的图片
4.2查询用户
假设通过地址访问完成用户的查询,这里以查询全部用户为例。编写views.py文件,方法如下:
完成本地路与全局路由的关联。
4.3修改用户
修改用户同上,直接放图:
4.4删除用户
删除用户同上,直接放图:
4.5.完成后的代码截图
templates下的文件(两个页面)
views.py文件
本地路由文件
全局路由文件
models.py文件
settings.py文件(标记为修改的部分)
工程结构目录