Django上课笔记(一)——环境配置与项目创建
Django上课笔记(一)——环境配置与项目创建
这篇文章在acwing的markdown渲染器下展示出现了一些问题
更好的阅读体验
租阿里云服务器
在学生机里,我们可以选择租这一台

如果有条件的话可以买y总推荐的:
双十一三年只需180!!!
注意:如果可以选系统,一定要选择Ubuntu 20.04 64位
配置服务器
1.登录自己的云服务器
首先用AC Terminal或电脑上的git bash,用ssh登录到你租的云服务器
ssh 用户名@公网IP如果是阿里云,用户名默认为root
按照提示输入密码后,就登录到了自己的云服务器上
1.1创建新用户
如果直接用root账户操作,会有误操作的风险。所以一般新建一个用户,并给其root权限。避免翻车~~~~
创建一个新用户:
adduser 用户名
#创建时下面的信息都可以不填给该用户分配root权限:
usermod -aG sudo 用户名由root用户切换到指定用户:
su 用户名由普通用户切换回root用户:
su
cd ~ #回到当前用户的家目录注:root用户的目录在:/root下,普通用户的目录在:/home/用户名下
当然,你也可以配置免密登录简化登录过程。
1.2配置免密登录
一直按ctrl+d回到AC Terminal或电脑上的git bash,然后:
cd ~/.ssh在.ssh目录下,新建一个config文件,文件内容为:
Host 自己起的主机名
HostName 公网ip
User 用户名
Port 端口号Host tx
HostName 43.136.49.173
User tao
Port 22然后使用如下命令一键添加公钥:
ssh-copy-id myserver2.配置docker环境
2.1.安装docker
先执行:
sudo apt-get update如果提示没有
apt-get这条命令,需要先下载这条命令:安装tmux:
sudo apt-get install tmux同步配置文件:
回到AC Terminal或电脑上的git bash,然后:scp .bashrc .vimrc .tmux.conf 自己起的主机别名:同步后,tmux和vim就有了熟悉的感觉*!*
进入docker官网
打开tmux,在tmux中安装,依次执行:
sudo apt-get updatesudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.iosudo apt-get install docker-compose
至此安装完成,执行:
docker --version如果正确输出版本号,大功告成!!!!
由于docker的很多命令需要sudo 权限,为了方便可以将当前用户加入安装中自动创建的docker用户组:
sudo usermod -aG docker $USER2.2.建立docker镜像
acwing有统一的镜像,位置在:/var/lib/acwing/docker/images/下
在
AC Terminal中,将django镜像上传至自己的服务器:scp /var/lib/acwing/docker/images/镜像包名 自己起的主机别名:想保存的自己服务器上的文件路径例如,我在别名为
ali的服务器上创建了一个文件夹docker_images,路径为~/docker_images。要将AC Terminal中/var/lib/acwing/docker/images/下的django_lesson_1_0.tar镜像保存在服务器中的docker_images下,有:scp /var/lib/acwing/docker/images/django_lesson_1_0.tar ali:docker_images:将
docker_images下载到本地:scp -r 自己起的主机别名:要下载文件夹的路径 要下载至的路径将镜像包导入到自己服务器的docker环境中:
docker load -i 镜像包路径对于上例,有:
docker load -i docker_images/django_lesson_1_0.tar待其加载好后,可以用
docker images查看已经加载好的镜像在云服务器官网上->控制台->自己服务器->
安全组->配置规则中,打开20000和8000端口(除端口范围和备注,其他选项和已有端口保持一致)
阿里云后台开8000端口.png 用镜像创建并启动一个容器
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0这里,对于上过Linux基础课的同学,已经在20000端口运行了
docker_lesson镜像的一个容器。对于这个问题,要给之前的容器换端口号映射。
tips:给容器换端口号映射:查看所有容器:
docker ps -a先将容器打包为一个镜像:
#:将容器CONTAINER导出到本地文件xxx.tar中docker save -o 生成文件的存放路径(一般以.tar为后缀) 镜像名注意这里是
镜像名不是容器名。因为导出容器实际上是导出容器的镜像,容器本身不能做迁移tips:注意这两组语句的区别:#下面两句都是导出镜像/容器的镜像docker save -o 生成文件的存放路径(一般以.tar为后缀) 镜像名docker export -o 生成文件的存放路径(一般以.tar为后缀) 镜像名#下面两句都是加载镜像/容器的镜像docker load -i 要加载的镜像包的路径docker import 要加载的镜像包的路径 给该镜像起的别名区别:
export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态save/load会保存完整记录,体积更大将这个容器删除,删除前要保证该容器已经停止运行
# 查看所有容器 docker ps -a #关闭某个容器 docker stop 正在运行中的容器名 #删除某个容器 docker rm 容器名用原来的镜像创建并启动一个容器,这时,就可以重新映射端口号:
docker run -p 端口号映射 --name 镜像名 -itd 给该镜像重命名的名字
启动并进入容器
#启动容器 docker start django_server #进入容器 docker attach django_server重复
1.1创建新用户和1.2配置免密登录的过程,使AC Terminal或电脑上的git bash能直接登录到容器上必须
attach后,先按Ctrl-p,再按Ctrl-q挂起容器,ssh才能登录成功
第一个Django项目
创建django项目
django-admin startproject 项目名如:
django-admin startproject acappacapp的项目结构:
.
`-- acapp
|-- acapp
| |-- __init__.py
| |-- asgi.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py用git维护该项目
进到
acapp文件夹下,执行命令:git init生成密钥,用来连接仓库:
ssh-keygen在acgit上创建一个账号,并创建一个新项目
注意:创建时要把使用自述文件初始化仓库的勾去掉跳转后,将下图两条命令执行一遍,意思声明上传者身份,让远程仓库知道提交是谁发过来的

git用户全局设置.png 的两行命令执行一遍
将初始生成的文件提交git
git add . git commit -m "cerat project"创建并编写
readme.md文件将自己服务器的公钥上传至acgit:
cat ~/.ssh/id_rsa.pub把公钥粘贴到:

中的:

点击添加密钥
执行下图的箭头指的命令

再执行:
git push根据提示,再执行:
git push --set-upstream origin master
至此,服务器的项目与远程的仓库连接了起来
### 运行项目
1. 执行:
```shell
python3 manage.py runserver 0.0.0.0:8000会发现项目顺利的跑了起来,但是,在地址栏里输入地址访问会报错。原因是没有把公网ip加到ALLOWED_HOSTS里
配置
ALLOWED_HOSTS:#全局搜索哪些文件里有字符串 ag 字符串去到对应文件夹下,对应位置把自己的公网ip的
字符串写进python的列表中在git仓库的根目录下,创建
.gitignore文件,来配置不需要git管理的文件,如:
*/pycache
然后可以将该版本提交git
### 创建一个app
再开一个tmux窗口用来写项目,对应操作为:`按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window`
切换窗口的操作为:`按下ctrl + a后手指松开,然后按s:`,再`按下方向键右键展开所有window`,再`用方向键上下选择对应window`
执行:
```shell
python3 manage.py startapp app名字y总建议:一个项目只创建一个app
就生成了一个game文件夹:
|-- __init__.py
|-- admin.py #管理员页面能看到哪些数据库
|-- apps.py
|-- migrations
| `-- __init__.py
|-- models.py #定义网站的各种数据库表
|-- tests.py
`-- views.py #存放视图层操作给各种函数然后可以将该版本提交git
查看管理员页面
回到tumx中后台 的window
先把项目停止运行,然后把数据库的数据更新上去:
python3 manage.py migrate- 再把项目跑起来:
python3 manage.py runserver 0.0.0.0:8000在地址栏里输入
http://8.130.31.115:8000/admin,进入管理员登录界面创建管理员账户:
python3 manage.py createsuperuser编写具体业务
在
game文件夹下创建urls.py文件,和templates文件夹在
game下各个文件的作用:
├── game
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations #存放html文件
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py #存放路由
│ └── views.py #存放视图操作的函数- 编写
game下的views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
line1 = '<h1 style="text-align: center">我的博客</h1>'
line4 = '<a href="https://www.acwing.com/user/myspace/index/82975/">进入我的空间</a>'
line5 = '<a href="https://git.acwing.com/codeRokie/acapp">进入项目仓库</a>'
line3 = '<div><a href="/play/">测试跳转和返回</a></div>'
line2 = '<img src="https://gitee.com/liuyutaocode/tao-blog-image/raw/master/img/bg_mask.jpg" width=2000>'
return HttpResponse(line1 + line4 + line3 + line2 + line5)
def play(request):
line1 = '<h1 style="text-align: center">游戏界面</h1>'
line3 = '<a href="/">返回主页面</a>'
line2 = '<img src="https://cdn.acwing.com/media/user/profile/photo/82975_lg_521a445e8a.jpg" width=2000>'
return HttpResponse(line1 + line3 + line2)- 编写
game下的urls.py:
from django.urls import path
from game.views import index
urlpatterns = [
path("", index, name="index")
]- 编写
acapp下的urls.py:
from django.contrib import admin
from django.urls import path, include
import game
urlpatterns = [
path('',include('game.urls')),
path('admin/', admin.site.urls),
]访问过程:
用户请求—>acapp/url.py—>game/url.py—>game/views.py下的函数中
完结撒花~!
