Django项目部署到pythonanywhere及需要注意的问题

本文详细介绍了如何在PythonAnywhere上部署Django项目的过程,包括创建账户、使用GitHub克隆项目、配置虚拟环境与数据库等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 环境

  • 操作系统:windows10
  • 浏览器:chrome
  • python:3.7
  • Django:2.2.2
  • 数据库:MySQL
  • 编译器:PyCharm2019.1

2 注册一个pythonanywhere的账户

  • 已经注册了用户的同学跳转第3步
  1. 官网地址:https://www.pythonanywhere.com/
  2. 打开官网后点击
    在这里插入图片描述
  3. 然后在弹出的页面中点击(注意:这里创建的是一个免费的账户,最多可以使用两个console和一个website)
    在这里插入图片描述
  4. 然后填写用户名和邮箱以及密码就可以了。
    【注意】:用户名会变成你网站的域名的开头部分,及(username.pythonanywhere.com),以下所有使用到用户名的部分,本文均以“username”代替
    在这里插入图片描述
  5. 在注册成功后,需要进行一下邮箱验证,点击红框中的部分就可以了
    在这里插入图片描述
  6. 注册完成后的界面
    在这里插入图片描述

3 部署已有项目到pythonanywhere(使用GitHub)

  • 如果没有使用GitHub的小伙伴推荐使用一下GitHub,很方便。

3.1 新建终端,clone你的项目到pythonanywhere

  1. 找到consoles>Start a new console>Other>Bash,并点击
    在这里插入图片描述
  2. 进入终端后,输入你的GitHub的克隆链接
git clone https://github.com/...

然后等待一会儿,网速很快,CPU很慢。。。。看到下图这样的就说明成功了。
在这里插入图片描述

3.2 创建虚拟环境

  • 虽然说利用pycharm创建的Django项目会自带一个虚拟环境,但是这个虚拟环境在python anywhere上不好用,所以我们还是自己创建一个比较好
  • 虚拟环境创建在根目录,这是防止你的站点从GitHub上更新的时候,下载下来的东西会把虚拟环境覆盖掉,就白创建虚拟环境了。
    在这里插入图片描述
  1. 在刚才的Bash console里面继续书写代码:
virtualenv --python=python3.7 myvenv

这里是创建了一个python3.7的虚拟环境,虚拟环境的名字是myvenv,你也可以命名为其他的名字,出现下图所示说明创建好了
在这里插入图片描述

3.3 配置数据库

  1. 在Database中创建一个新的MySQL数据库
    在这里插入图片描述
    输入密码后就等着吧,挺慢的。
  2. 创建一个新的数据库,名字和你当初在本地使用的最好一致
    在这里插入图片描述
  3. 配置项目的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

  1. 点击add a new web app,然后点击next
    在这里插入图片描述
  2. 然后点击Manual configuration(including virtualenvs)
    在这里插入图片描述
  3. 选择python3.7
    在这里插入图片描述
  4. 点击next,等待一会儿。然后看到下面的网页。我依次介绍一下各个部分是干啥的。

4.2 web页面介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 修改项目文件夹目录

把它改成你刚刚clone下来的文件夹的目录就可以了
在这里插入图片描述

4.4 修改 WSGI 文件

点击下面的链接: /var/www/username_pythonanywhere_com_wsgi.py打开文件进行修改:

  1. 先把这段代码注释掉。
    在这里插入图片描述
  2. 然后改一下Django部分的内容:
    在这里插入图片描述
    需要改划红线的两个地方,就是将mysite改成你的项目的名字就可以了。
  3. 点击保存,返回。

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

【解决】:

  1. 首先确定你在__init.py__文件中有输入如下代码:
import pymysql
pymysql.install_as_MySQLdb()
  1. 其次找到出现问题的文件
    在这里插入图片描述
    就是错误提示中的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’解决办法_亭有枇杷树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值