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

it2022-05-09  34

1 环境

操作系统:windows10浏览器:chromepython:3.7Django: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’解决办法_亭有枇杷树


最新回复(0)