Django框架课2.1

Django上课笔记(一)——环境配置与项目创建
这篇文章在acwing的markdown渲染器下展示出现了一些问题

我的项目地址

http://106.15.185.233:8000/

我的acgit地址

丁 浩君 / acapp · GitLab

配置服务器
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 端口号
然后使用如下命令一键添加公钥:

ssh-copy-id myserver
2.配置docker环境
2.1.安装docker
先执行:
shell sudo apt-get update

如果提示没有apt-get这条命令,需要先下载这条命令:

```

```

安装tmux:
shell sudo apt-get install tmux

同步配置文件:
回到AC Terminal或电脑上的git bash,然后:
shell scp .bashrc .vimrc .tmux.conf 自己起的主机别名:

同步后,tmux和vim就有了熟悉的感觉^^!

进入docker官网
打开tmux,在tmux中安装,依次执行:

shell sudo apt-get update

shell sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release

shell curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

shell echo \ "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/null

shell sudo apt-get update

shell sudo apt-get install docker-ce docker-ce-cli containerd.io

至此安装完成,执行:

shell docker --version

如果正确输出版本号,大功告成!!!!

由于docker的很多命令需要sudo权限,为了方便可以将当前用户加入安装中自动创建的docker用户组:

sudo usermod -aG docker $USER
2.2.建立docker镜像
acwing有统一的镜像,位置在:/var/lib/acwing/docker/images/下

在AC Terminal 中,将django镜像上传至自己的服务器:
shell 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下,有:

shell scp /var/lib/acwing/docker/images/django_lesson_1_0.tar ali:docker_images:

将docker_images下载到本地:

shell scp -r 自己起的主机别名:要下载文件夹的路径 要下载至的路径

将镜像包导入到自己服务器的docker环境中:
shell docker load -i 镜像包路径

对于上例,有:

shell docker load -i docker_images/django_lesson_1_0.tar

待其加载好后,可以用docker images查看已经加载好的镜像

在云服务器官网上->控制台->自己服务器->安全组->配置规则中,打开20000和8000端口(除端口范围和备注,其他选项和已有端口保持一致)


用镜像创建并启动一个容器
shell docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0

这里,对于上过Linux基础课的同学,已经在20000端口运行了docker_lesson镜像的一个容器。

对于这个问题,要给之前的容器换端口号映射。

tips:给容器换端口号映射:

查看所有容器:

docker ps -a

先将容器打包为一个镜像:

shell #:将容器CONTAINER导出到本地文件xxx.tar中docker save -o 生成文件的存放路径(一般以.tar为后缀) 镜像名

注意这里是镜像名不是容器名。因为导出容器实际上是导出容器的镜像,容器本身不能做迁移

tips:注意这两组语句的区别:

shell #下面两句都是导出镜像/容器的镜像docker save -o 生成文件的存放路径(一般以.tar为后缀) 镜像名docker export -o 生成文件的存放路径(一般以.tar为后缀) 镜像名#下面两句都是加载镜像/容器的镜像docker load -i 要加载的镜像包的路径docker import 要加载的镜像包的路径 给该镜像起的别名

区别:
export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
save/load会保存完整记录,体积更大

将这个容器删除,删除前要保证该容器已经停止运行

```shell
# 查看所有容器
docker ps -a

#关闭某个容器
docker stop 正在运行中的容器名

#删除某个容器
docker rm 容器名
```

用原来的镜像创建并启动一个容器,这时,就可以重新映射端口号:

shell docker run -p 端口号映射 --name 镜像名 -itd 给该镜像重命名的名字

启动并进入容器

```shell
#启动容器
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 acapp
acapp的项目结构:

.
`-- acapp
    |-- acapp
    |   |-- __init__.py
    |   |-- asgi.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- manage.py
用git维护该项目
进到acapp文件夹下,执行命令:
shell git init

生成密钥,用来连接仓库:
ssh-keygen

在acgit上创建一个账号,并创建一个新项目
注意:创建时要把使用自述文件初始化仓库的勾去掉

跳转后,将下图两条命令执行一遍,意思声明上传者身份,让远程仓库知道提交是谁发过来的

的两行命令执行一遍

将初始生成的文件提交git
shell git add . git commit -m "cerat project"

创建并编写readme.md文件

将自己服务器的公钥上传至acgit:

shell cat ~/.ssh/id_rsa.pub

把公钥粘贴到:

中的:

点击添加密钥

执行下图的箭头指的命令

再执行:

shell git push

根据提示,再执行:

shell git push --set-upstream origin master

至此,服务器的项目与远程的仓库连接了起来

运行项目
执行:
shell python3 manage.py runserver 0.0.0.0:8000

会发现项目顺利的跑了起来,但是,在地址栏里输入地址访问会报错。原因是没有把公网ip加到ALLOWED_HOSTS里

配置ALLOWED_HOSTS:
shell #全局搜索哪些文件里有字符串 ag 字符串

去到对应文件夹下,对应位置把自己的公网ip的字符串写进python的列表中

在git仓库的根目录下,创建.gitignore文件,来配置不需要git管理的文件,如:

shell */__pycache__

然后可以将该版本提交git

创建一个app
再开一个tmux窗口用来写项目,对应操作为:按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window

切换窗口的操作为:按下ctrl + a后手指松开,然后按s:,再按下方向键右键展开所有window,再用方向键上下选择对应window

执行:

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下的函数中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值