1 环境
- 操作系统:windows10
- 浏览器:chrome
- python:3.7
- Django:2.2.2
- 数据库:MySQL
- 编译器:PyCharm2019.1
2 注册一个pythonanywhere的账户
- 已经注册了用户的同学跳转第3步
- 官网地址:https://www.pythonanywhere.com/
- 打开官网后点击
- 然后在弹出的页面中点击(注意:这里创建的是一个免费的账户,最多可以使用两个console和一个website)
- 然后填写用户名和邮箱以及密码就可以了。
【注意】:用户名会变成你网站的域名的开头部分,及(username.pythonanywhere.com),以下所有使用到用户名的部分,本文均以“username”代替
- 在注册成功后,需要进行一下邮箱验证,点击红框中的部分就可以了
- 注册完成后的界面
3 部署已有项目到pythonanywhere(使用GitHub)
- 如果没有使用GitHub的小伙伴推荐使用一下GitHub,很方便。
3.1 新建终端,clone你的项目到pythonanywhere
- 找到consoles>Start a new console>Other>Bash,并点击
- 进入终端后,输入你的GitHub的克隆链接
git clone https://github.com/...
然后等待一会儿,网速很快,CPU很慢。。。。看到下图这样的就说明成功了。
3.2 创建虚拟环境
- 虽然说利用pycharm创建的Django项目会自带一个虚拟环境,但是这个虚拟环境在python anywhere上不好用,所以我们还是自己创建一个比较好
- 虚拟环境创建在根目录,这是防止你的站点从GitHub上更新的时候,下载下来的东西会把虚拟环境覆盖掉,就白创建虚拟环境了。
- 在刚才的Bash console里面继续书写代码:
virtualenv --python=python3.7 myvenv
这里是创建了一个python3.7的虚拟环境,虚拟环境的名字是myvenv,你也可以命名为其他的名字,出现下图所示说明创建好了
3.3 配置数据库
- 在Database中创建一个新的MySQL数据库
输入密码后就等着吧,挺慢的。 - 创建一个新的数据库,名字和你当初在本地使用的最好一致
- 配置项目的settings.py文件,建议是在本地先配置,然后使用git上传一下。但是,如果你现在的CPU使用频率过高,为了保险起见还是在线上配置比较好。
需要改动的地方用三个:DEBUG, ALLOWED_HOSTS, DATABASES
,为了让线上和线下都可以使用,我用了一个比较笨的方法改这些东西:
【注意】:下列代码不能直接复制,里面的username和databasename分别是你的用户名和数据库名,相应的配置项也可以在刚才的数据库页面找到。
【注意】:ALLOWED_HOSTS
里面的网站需要小写
PythonAnywhere = False # 设为False是为了本地支持
# PythonAnywhere = True # 设为True是为了上线PythonAnywhere支持
if PythonAnywhere is False:
DEBUG = True
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bplan',
'USER': 'root',
'PASSWORD': '******',
'HOST': 'localhost',
'PORT': '3306',
}
}
elif PythonAnywhere is True:
DEBUG = False
ALLOWED_HOSTS = ['username.pythonanywhere.com']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "username$databasename",
'USER': 'username',
'PASSWORD': '******',
'HOST': 'username.mysql.pythonanywhere-services.com',
}
}
4 配置web站点
4.1 新建一个web app
- 点击add a new web app,然后点击next
- 然后点击
Manual configuration(including virtualenvs)
- 选择python3.7
- 点击next,等待一会儿。然后看到下面的网页。我依次介绍一下各个部分是干啥的。
4.2 web页面介绍
4.3 修改项目文件夹目录
把它改成你刚刚clone下来的文件夹的目录就可以了
4.4 修改 WSGI 文件
点击下面的链接: /var/www/username_pythonanywhere_com_wsgi.py打开文件进行修改:
- 先把这段代码注释掉。
- 然后改一下Django部分的内容:
需要改划红线的两个地方,就是将mysite改成你的项目的名字就可以了。 - 点击保存,返回。
4.5 修改虚拟环境路径
如果你提供的虚拟环境不正确,会提示你该目录下没有虚拟环境。正确的情况如下。
4.6 修改静态文件地址
需要改两个地方的地址,一个是你的站点的static地址,一个是Django自带的admin后台的static地址,如果你没有用到admin,那就不用管了。
5 最后的操作
5.1 装包
先关掉刚才的Bash,然后点击 Start a console in this virtualenv,在虚拟环境里新建一个console。
【注意】尽量不要输入pip3 list,特别耗费CPU。尽量不要把指令输错,记得要输入pip3
pip3 install Django
pip3 install Pillow
pip3 install pymysql
pip3 install user_agents
5.2 迁移数据库
python manage.py makemigrations
python manage.py migrate
- 如果你的文件很多的话,那么这个过程巨卡无比
- 出现下面这样子就说明OK了
5.3 创建admin的超级用户
- 不用admin的同学跳过这一步
python manage.py createsuperuser
6 Debug
6.1 pymysql问题
6.1.1 线上:
【问题描述】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
【参考】:Django建站过程遇到的问题
【解决】:找到Python安装路劲下的/home/username/myvenv/lib/python3.7/site-packages/django/db/backends/mysql/base.py
文件
将文件中的如下代码注释
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
重新在项目manage.py路劲下执行如下命令即可
python manage.py makemigrations
python manage.py migrate
6.1.2 线下:
【现象】:在命令行中输入py manage.py runserver
后提示出如下错误
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
这是因为Django对于mysql是不兼容的,而且你应该已经下载了pymysql
【解决】:
- 首先确定你在__init.py__文件中有输入如下代码:
import pymysql
pymysql.install_as_MySQLdb()
- 其次找到出现问题的文件
就是错误提示中的base.py
文件,然后对这个文件进行编辑。找到如下语句,然后将这个if语句注释掉就可以了。
# 之前的代码
version = Database.version_info
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
# 修改之后的代码:
version = Database.version_info
# if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
6.2 URL中没东西
【现象】:
raise ImproperlyConfigured(msg.format(name=self.urlconf_name))
django.core.exceptions.ImproperlyConfigured: The included URLconf '<module '....urls' from '...'>' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
这是由于你的urls.py文件中没有设置任何的路由导致的,需要在其中简单设置一个路由。
6.3 decode问题
【现象】:
File "C:\Users\username\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
【解决】:
#原代码:
query = getattr(cursor, '_executed', None)
if query is not None:
query = query.decode(errors='replace')
return query
#修改为:
query = getattr(cursor, '_executed', None)
if query is not None:
query = query.encode(errors='replace')
return query
即,将decode修改为encode,此解决方法参考在Django框架中偶遇报错:AttributeError: ‘str’ object has no attribute ‘decode’解决办法_亭有枇杷树