前言 2020.2.14是情人节,2020.2.13花了整整一晚搭表白网站,由于第一次用Django框架,遇到很多坑,在此记录
搭建Django框架的网站需要哪些东西 一台云服务器(如阿里云)
云服务器上安装好配置环境(我用到的有Python3+Django框架)
FTP工具filezilla,方便往服务器上传输网站源码(源码见末尾)
搭建步骤
- 在自己的云服务器上安装Python3,安装步骤见
https://www.cnblogs.com/xiujin/p/11477419.html
- 安装好python3之后,下载django库,命令为(根据自己设置的pip命令名可调整)
pip3 install django
- 在自己的服务器上安装mysql(实际上本次网站未用到mysql数据库)
https://blog.csdn.net/u011035397/article/details/103583463
- 在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
配置数据库部分删除
解放方案
打开/etc/my.cnf配置文件,在mysql的后面加入一句话:skip-grant-tables
然后重启mysql服务

文章图片

文章图片
参考链接https://blog.csdn.net/baidu_35901646/article/details/80942077
踩到的坑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
参考链接
https://blog.csdn.net/weixin_33127753/article/details/89100552
踩到的坑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 viewurlpatterns = [
url(r'^hello$', view.hello),
]
新版本如下:
from django.urls import path
from . import viewurlpatterns = [
path('hello/', view.hello),
]
参考链接https://blog.csdn.net/sinat_38369128/article/details/81702636
http://www.runoob.com/django/django-first-app.html
https://www.imooc.com/qadetail/251834
踩到的坑5,启动django后,报不能访问,400错误 启动django后,不能访问,报400错误。
【【Django】总结用Django框架搭建表白网站】原因:没有开启允许访问
处理:编辑项目目录下
settings.py
,把其中的ALLOWED_HOSTS=[]
改成ALLOWED_HOSTS=['*']
其中的*号表示任意地址,注意有单引号
项目源码(已修改无误) 链接:https://pan.baidu.com/s/1kbJO9xPfs_q8k4R3fIkfnQ
提取码:a084
效果图,有动画,有时钟,有背景音乐(曲名:想见你想见你想见你)非常好看
有前端基础html+css+js就可以修改文字和背景音乐啦,或者自己再添加图片,其他网页进去都可以的

文章图片
推荐阅读
- Django|Python接口自动化测试系列[V1.0.0][加密接口]
- Django (一)-DRF(DjangoRESTframework)工程搭建
- Django中新版本变动和版本不同的各种坑 (持续更新)
- xadmin|ImportError: No module named 'reversion'
- 解决django1.11与Python3.7不兼容问题
- Django中的auto_now、auto_now_add
- python|web开发之Django(七)(注册、登录、会话以及跳转个人中心)
- django版本和python版本的对应
- django中如何修改网页title和站点header?
- 关于django2中views和url已经前端模板页面的关系