前言
2020.2.14是情人节,2020.2.13花了整整一晚搭表白网站,由于第一次用Django框架,遇到很多坑,在此记录
搭建Django框架的网站需要哪些东西
一台云服务器(如阿里云)
云服务器上安装好配置环境(我用到的有Python3+Django框架)
FTP工具filezilla,方便往服务器上传输网站源码(源码见末尾)
搭建步骤
- 在自己的云服务器上安装Python3,安装步骤见
- 安装好python3之后,下载django库,命令为(根据自己设置的pip命令名可调整)
pip3 install django
- 在自己的服务器上安装mysql(实际上本次网站未用到mysql数据库)
- 在centos服务器上选择一个合适目录,输入命令创建django框架的项目
django-admin startproject love #love为项目名
- 然后
cd love
进入项目目录,在该目录下执行,创建web应用入口
python3 manage.py startapp web
- 最后将写好的源码用filezilla上传到服务器,覆盖项目即可(由于第一次配置Django框架网站,我猜想第4步和第5步可直接跳过,直接到第6步可以,待测试)
- 最后让项目一直在后台运行,注意要设置阿里云8000端口的安全组规则(本次项目不是正式在服务器配置Django,没有使用Nginx和uwsgi,而是直接使用nohup命令)
nohup python3 manage.py runserver 0.0.0.0:8000 &
到此搭建完成,源码和效果图请见末尾,踩坑可跳过不看
踩到的坑1,数据库配置
- 先看源码结构
- 比较重要
settings.py
这个py文件,因为这里面是项目的配置,再看pycharm专业版,自动生成项目里的settings.py
,主要是数据库配置部分,默认是这样子的,默认数据库是sqlite - 可修改为mysql数据库的配置
- 如果项目中没有用到数据库,可以将
settings.py
配置数据库部分删除
踩到的坑2,在centos7上,首次安装好mysql数据库后
出现以下报错ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)
解放方案
打开/etc/my.cnf配置文件,在mysql的后面加入一句话:skip-grant-tables
然后重启mysql服务
踩到的坑3,对于Django2.2以上版本,用pymysql链接mysql数据库时
报错如下:
mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
原因
Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持Python3,因此这里将MySQL驱动设置为pymysql,使用 pip install pymysql 进行安装,然后在工程文件__init__.py添加以下代码即可。
#安装pymysql
pip install pymysql
#__init__.py
import pymysql
pymysql.install_as_MySQLdb()
此法对Django2.1.4版本有效,若是版本太新,则用以下解决办法
Django2以上的版本,安装之前需要好像要将pymysql卸载,pip3 uninstall pymsql
,然后安装mysqlclient
,linux这些编译安装不上的话可以先安装个mysql-devel
然后再安装mysqlclient
踩到的坑4,django的路由配置
报错如下,这种情况需要检查url路径是否填写正确,如果填写正确,则可能是django版本引起的问题
看下图的错误路由配置,是path和url不能混用
在使用Django的时候,多次遇到urls与path,不知道两者有什么区别。下面简单介绍一下两者
在django>=2.0的版本,urls.py中的django.conf.urls已经被django.urls所取代。
django.urls的用法:
from django.urls import path
from . import view
urlpatterns = [
path('', view.hello),
path('world/', view.world)
]
其中最大的改变如下:import urls被import path所取代
如果是路径需要在路径的后面加上一个斜杠 /
旧版本如下:
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^hello$', view.hello),
]
新版本如下:
from django.urls import path
from . import view
urlpatterns = [
path('hello/', view.hello),
]
踩到的坑5,启动django后,报不能访问,400错误
启动django后,不能访问,报400错误。
原因:没有开启允许访问
处理:编辑项目目录下settings.py
,把其中的
ALLOWED_HOSTS=[]
改成ALLOWED_HOSTS=['*']
其中的*号表示任意地址,注意有单引号
项目源码(已修改无误)
链接:https://pan.baidu.com/s/1kbJO9xPfs_q8k4R3fIkfnQ
提取码:a084
效果图,有动画,有时钟,有背景音乐(曲名:想见你想见你想见你)非常好看
有前端基础html+css+js就可以修改文字和背景音乐啦,或者自己再添加图片,其他网页进去都可以的