前言

2020.2.14是情人节,2020.2.13花了整整一晚搭表白网站,由于第一次用Django框架,遇到很多坑,在此记录

搭建Django框架的网站需要哪些东西

一台云服务器(如阿里云)
云服务器上安装好配置环境(我用到的有Python3+Django框架)
FTP工具filezilla,方便往服务器上传输网站源码(源码见末尾)

搭建步骤

  1. 在自己的云服务器上安装Python3,安装步骤见
  2. 安装好python3之后,下载django库,命令为(根据自己设置的pip命令名可调整)
pip3 install django
  1. 在自己的服务器上安装mysql(实际上本次网站未用到mysql数据库)
  2. 在centos服务器上选择一个合适目录,输入命令创建django框架的项目
django-admin startproject love     #love为项目名
  1. 然后​​cd love​​ 进入项目目录,在该目录下执行,创建web应用入口
python3 manage.py startapp web
  1. 最后将写好的源码用filezilla上传到服务器,覆盖项目即可(由于第一次配置Django框架网站,我猜想第4步和第5步可直接跳过,直接到第6步可以,待测试)
  2. 最后让项目一直在后台运行,注意要设置阿里云8000端口的安全组规则(本次项目不是正式在服务器配置Django,没有使用Nginx和uwsgi,而是直接使用nohup命令)
nohup python3 manage.py runserver 0.0.0.0:8000 &

到此搭建完成,源码和效果图请见末尾,踩坑可跳过不看

踩到的坑1,数据库配置

  1. 先看源码结构
    【Django】总结用Django框架搭建表白网站_mysql
  2. 比较重要​​settings.py​​​这个py文件,因为这里面是项目的配置,再看pycharm专业版,自动生成项目里的​​settings.py​​​,主要是数据库配置部分,默认是这样子的,默认数据库是sqlite
    【Django】总结用Django框架搭建表白网站_python_02
  3. 可修改为mysql数据库的配置
    【Django】总结用Django框架搭建表白网站_python_03
  4. 如果项目中没有用到数据库,可以将​​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服务【Django】总结用Django框架搭建表白网站_mysql_04
【Django】总结用Django框架搭建表白网站_django_05
踩到的坑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版本引起的问题【Django】总结用Django框架搭建表白网站_python_06
看下图的错误路由配置,是path和url不能混用【Django】总结用Django框架搭建表白网站_mysql_07
在使用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就可以修改文字和背景音乐啦,或者自己再添加图片,其他网页进去都可以的
【Django】总结用Django框架搭建表白网站_python_08