笔记内容转载自AcWing的Django框架课讲义,课程链接:AcWing Django框架课。
首先拉取一个 Ubuntu 镜像:
docker pull ubuntu:20.04
创建容器后进入容器配置基本环境并创建用户:
docker run -p 20000:22 -p 8000:8000 --name ubuntu_django -itd ubuntu:20.04
docker attach ubuntu_django
apt-get update
apt-get install vim
apt-get install tmux
apt-get install tree
apt-get install silversearcher-ag
apt-get install openssh-server
adduser asanosaki
usermod -aG sudo asanosaki
exit
然后去云服务器官网放行20000端口和8000端口:
通过 SSH 远程连接容器:
ssh asanosaki@localhost -p 20000
如果出现 kex_exchange_identification: read: Connection reset by peer
报错,就去进入容器的根用户下编辑 hosts.allow
文件:
vim /etc/hosts.allow
在文件中添加一行:sshd: ALL
,然后重启 SSH 服务:service ssh restart
。
进入容器根用户安装剩余的环境:
apt-get update
apt-get install python3
apt-get install python3-pip
apt-get install git
pip install Django
pip install uwsgi
pip install supervisor
查看 Django 版本:
django-admin --version
通过以下命令创建一个 Django 项目:
django-admin startproject djangoapp
将项目上传至 Git(注意需要先在容器中生成公钥,并在 Git 中添加公钥):
cd djangoapp/
git init
git config --global user.name "xxx"
git config --global user.email "[email protected]"
git add .
git commit -m "initial project"
git remote add origin [email protected]:<用户ID>/<仓库名>.git
git push --set-upstream origin master
尝试启动一下项目:
python3 manage.py runserver 0.0.0.0:8000
这时候访问一下网址:http://<云服务器的公网IP>:8000/
,会看到提示:Invalid HTTP_HOST header: '<云服务器的公网IP>:8000'. You may need to add '<云服务器的公网IP>' to ALLOWED_HOSTS.
,这是因为 Django 是个很安全的框架,会自动屏蔽很多可疑的访问,我们需要将公网 IP 添加到 ALLOWED_HOSTS
中:
cd djangoapp/ # 此时在 ~/djangoapp/djangoapp 中
找到 ALLOWED_HOSTS = [],改为 ALLOWED_HOSTS = ["<公网IP>"] # 注意要用引号
Tips:如果找不到 ALLOWED_HOSTS
可以使用 ag
命令查找:
ag ALLOWED_HOSTS
现在即可成功访问网址:
此时会看到项目文件夹下出现了一个 __pycache__
目录,这个是预编译好的一些文件,用于加速 Python 运行,我们在往 Git 上传代码时最好不要上传这些中间文件,我们可以在仓库的根目录下添加一个 .gitignore
文件,文件内容如下:
*/__pycache__
最后上传至 Git:
git add .
git commit -m "modify ALLOWED_HOSTS"
git push
在上一节中启动的页面为 Django 的默认页面,我们在开发时需要创建一个新的 App 写自己的页面,首先通过以下指令创建一个名为 game
的 App,创建好后当前目录下会生成一个名为 game
的目录:
python3 manage.py startapp game
git add .
git commit -m "init app game"
git push
此时启动 runserver
指令时会发现出现了报错:You have 18 unapplied migration(s). Your project may not work properly ......
,原因是有一部分的数据库修改还没有同步到数据库里,运行以下指令同步数据库的修改:
python3 manage.py migrate
打开 http://<公网IP>:8000/admin/
页面可以看到 Django 自带的管理员页面,我们可以创建管理员用户(假设用户名和密码都为 admin
):
python3 manage.py createsuperuser
然后即可登录管理员账户进入管理员界面:
我们再回过头来进入之前创建的 App 中,能看到有几个比较重要的文件:models.py
、views.py
,我们先手动创建剩余的比较重要的文件:
touch urls.py
mkdir templates
接下来整个项目需要操作的就这四个文件。