配置docker、git环境与项目创建

配置 docker 环境

与先前在 linux基础课 里完成对于 dock_lesson 容器的配置完全一样

# 先将 y 总给的镜像 scp 到自己租的服务器上
scp django_lesson_1_0.tar docker1:

# 登录到自己的服务器上
ssh docker1

# 将该镜像加载出来
docker load -i django_lesson_1_0.tar

# 利用该镜像 **django_lesson** 创建并启动成容器 **django_server**
# 同时将该容器的端口 22(ssh登录服务端口) 和 8000(Django调试端口)
# 映射到服务器的 20000 与 8000 端口上
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0

# 进入容器内
docker attach django_server

# 创建接下来要用的用户 acs 并给予 sudo 权限
adduser gkx
usermode -aG sudo gkx

# 然后回到 Ac-Terminal 下配置 ssh 到容器下的免密登录
可以看这个 [ssh小结](https://www.acwing.com/solution/content/196338/) 

# 把bash、vim、tmux的配置文件上传到django服务器下
scp .bashrc .vimrc .tmux.conf django:

然后用 Django-admin 新建一个 Django 项目

gkx@bfbf2f2b37fc:~$ django-admin startproject acapp
gkx@bfbf2f2b37fc:~$ tree .
.
`-- acapp
    |-- acapp
    |   |-- __init__.py
    |   |-- asgi.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- manage.py

2 directories, 6 files

配置 git 环境

在对项目进行 git 提交前,先配置好 git.acwing 与 服务器的密钥交互

ssh-keygen
cat .ssh/id_rsa.pub
# 复制密钥,提交到 git 服务器的 ssh 密钥中
然后对应上远程仓库即可

# 常规流程,不多解释了
git config --global user.name "balabala"
git config --global user.email "balabala"

git init
git remote add origin git@git.acwing.com:colopen/acapp.git
git add .
git commit -m "Initial commit"
git push -u origin main

配置 Django 项目

先直接启动项目

python3 manage.py runserver 0.0.0.0:8000

直接登录到对应 ip:socket 下后,会看到标题提示字

Invalid HTTP_HOST header: '39.101.71.193:8000'. You may need to add '39.101.71.193' to ALLOWED_HOSTS.

要求我们把 39.101.71.193 参数添加到 ALLOWED_HOSTS 下

先找出 ALLOWED_HOSTS 在哪个文件下,然后加进去即可:

# 找出 ALLOWED_HOSTS 在哪个文件下
$ ag ALLOWED_HOSTS

> acapp/settings.py
> 28:ALLOWED_HOSTS = []

# 通过 ag命令 找到了该函数在 acapp/settings.py 下

$ vim acapp/settings.py

ALLOWED_HOSTS = ["39.101.71.193"]

# 保存后退出,再从浏览器登入

首页标题显示如下,这表示我们成功了

The install worked successfully! Congratulations!

.gitignore

考虑把当前项目,提交到 git 服务器

执行一次 git status 后,发现会提示我们把 __pycache__ 缓存文件也提交

缓存文件,可执行文件,编译文件 不要传到自己的 git 项目里

$ git status
> Untracked files:
>   (use "git add <file>..." to include in what will be committed)
>       acapp/__pycache__/
>


为了不让 git 每次去额外检测缓存的 cache 文件,额外编写一个 .gitignore 文件,格式如下

# 格式:**/文件名
**/__pycache__

再调用一次 git status 就不会提示要 add 到 暂存区 了

编写 .gitignore 也是需要掌握的一项技能

创建管理员登录页面

直接调用封装好的命令,就会在当前目录下创建一个game文件夹

$ python3 manage.py startapp game
$ tree .
> .
> |-- acapp
> |   |-- __init__.py
> |   |-- __pycache__
> |   |   |-- __init__.cpython-38.pyc
> |   |   |-- settings.cpython-38.pyc
> |   |   |-- urls.cpython-38.pyc
> |   |   `-- wsgi.cpython-38.pyc
> |   |-- asgi.py
> |   |-- settings.py
> |   |-- urls.py
> |   `-- wsgi.py
> |-- db.sqlite3
> |-- game
> |   |-- __init__.py
> |   |-- admin.py          # 管理员页面
> |   |-- apps.py           # 用的不多
> |   |-- migrations
> |   |   `-- __init__.py
> |   |-- models.py         # 定义网站里的数据库表
> |   |-- tests.py
> |   `-- views.py          # 视图,即函数
> `-- manage.py

在运行服务器的同时,我们也会看到几行红字警告:

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

意思大致是有 18 个数据库的修改没有 apply,直接复制执行他要求我们执行的代码即可

python3 manage.py migrate

数据库修改完成后,打开 ip:socket/admin 就会进入 管理员登录 页面了

然后创建一个 管理员用户

$ python3 manage.py createsuperuser
> Username (leave blank to use 'gkx'): admin
> Email address: 
> Password: 111111
> Password (again): 111111
> Superuser created successfully.

然后利用该 管理员用户 登录 admin 页面,即可成功登陆

创建用户登录页面

game 下的各个文件作用:

  1. models : 存放各种数据的格式,也就是表的结构(例:class User)
  • views : 存放所有服务器端调用的函数,返回一个字符串(可以是网页的 html 文件)
  • urls : 路由(根据浏览器的url,决定调用的哪些函数)
  • templates : 存放 html
    现在我们要实现一个路由重定向:

url 输入网址 -> acapp.urls -> game.urls -> game.views.index -> 展示页面

我们要修改三个文件,如下:

game.views

from django.http import HttpResponse

def index(request):
    line1 = '<h1 style="text-align: center"> 第一个网页 </h1>'
    return HttpResponse(line1)

game.urls

from django.urls import path
from game.views import index

urlpatterns = [ 
    path("", index, name="index"),
]

acapp.urls

from django.contrib import admin
from django.urls import path, include

urlpatterns = [ 
    path('', include('game.urls')),
    path('admin/', admin.site.urls),
]

然后直接打开 ip:socket 可以直接显示 index 返回的网页