配置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
下的各个文件作用:
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 返回的网页
大佬可以分享一下django课程使用的docker镜像吗?我云服务器过期了,想使用实验室的服务器,但是没做内网穿透,没法scp到服务器上,谢谢大佬