Django上课笔记——环境配置与项目创建

Posted 卷王2048

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django上课笔记——环境配置与项目创建相关的知识,希望对你有一定的参考价值。

Django上课笔记(一)——环境配置与项目创建

租阿里云服务器

阿里云学生机官网入口

在学生机里,我们可以选择租这一台

如果有条件的话可以买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 端口号

然后使用如下命令一键添加公钥:

ssh-copy-id myserver

2.配置docker环境

2.1.安装docker

  1. 先执行:

    sudo apt-get update
    

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

    
    
  2. 安装tmux:

    sudo apt-get install tmux 
    
  3. 同步配置文件:
    回到AC Terminal或电脑上的git bash,然后:

    scp .bashrc .vimrc .tmux.conf 自己起的主机别名:
    

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

  4. 进入docker官网

    打开tmux,在tmux中安装,依次执行:

    1. sudo apt-get update
      
    2. sudo apt-get install \\
          ca-certificates \\
          curl \\
          gnupg \\
          lsb-release
      
    3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      
    4. 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
      
    5. sudo apt-get update
      
    6. sudo apt-get install docker-ce docker-ce-cli containerd.io
      

    至此安装完成,执行:

    docker --version
    

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

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

sudo usermod -aG docker $USER

2.2.建立docker镜像

acwing有统一的镜像,位置在:/var/lib/acwing/docker/images/

  1. 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 自己起的主机别名:要下载文件夹的路径 要下载至的路径
    
  2. 将镜像包导入到自己服务器的docker环境中:

    docker load -i 镜像包路径
    

    对于上例,有:

    docker load -i docker_images/django_lesson_1_0.tar
    

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

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

  4. 用镜像创建并启动一个容器

    docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0 
    

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

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

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

    1. 查看所有容器:

      docker ps -a
      
    2. 先将容器打包为一个镜像:

      #:将容器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会保存完整记录,体积更大

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

      # 查看所有容器
      docker ps -a
      
      #关闭某个容器
      docker stop 正在运行中的容器名
      
      #删除某个容器
      docker rm 容器名
      
    4. 用原来的镜像创建并启动一个容器,这时,就可以重新映射端口号:

      docker run -p 端口号映射 --name 镜像名 -itd 给该镜像重命名的名字 
      
  5. 启动并进入容器

    #启动容器
    docker start django_server
    
    #进入容器
    docker attach django_server 
    
  6. 重复1.1创建新用户1.2配置免密登录的过程,使AC Terminal或电脑上的git bash能直接登录到容器上

  7. 必须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维护该项目

  1. 进到acapp文件夹下,执行命令:

    git init
    
  2. 生成密钥,用来连接仓库:

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

  4. 跳转后,将

    的两行命令执行一遍

  5. 将初始生成的文件提交git

    git add .
    git commit -m "cerat project"
    
  6. 创建并编写readme.md文件

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

    cat ~/.ssh/id_rsa.pub
    

    把公钥粘贴到:

    中的:

    点击添加密钥

  8. 执行下图的箭头指的命令

  9. 再执行:

    git push
    

    根据提示,再执行:

    git push --set-upstream origin master
    

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

运行项目

  1. 执行:

    python3 manage.py runserver 0.0.0.0:8000
    

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

  2. 配置ALLOWED_HOSTS:

    #全局搜索哪些文件里有字符串
    ag 字符串
    

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

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

    */__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

查看管理员页面

  1. 回到tumx中后台 的window

  2. 先把项目停止运行,然后把数据库的数据更新上去:

    python3 manage.py migrate
    
  3. 再把项目跑起来:

    python3 manage.py runserver 0.0.0.0:8000
    
  4. 在地址栏里输入http://8.130.31.115:8000/admin,进入管理员登录界面

  5. 创建管理员账户:

    python3 manage.py createsuperuser
    

编写具体业务

  1. game文件夹下创建urls.py文件,和templates文件夹

  2. game下各个文件的作用:

    ├── game
    │   ├── __init__.py    
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations       #存放html文件
    │   │   └── __init__.py
    │   ├── models.py         
    │   ├── tests.py
    │   ├── urls.py           #存放路由
    │   └── views.py					#存放视图操作的函数
    
    
  3. 编写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)
    
    
    
  4. 编写game下的urls.py:

    from django.urls import path
    from game.views import index
    
    
    urlpatterns = [
        path("", index, name="index")
    ]
    
    
  5. 编写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下的函数中

完结撒花~!

以上是关于Django上课笔记——环境配置与项目创建的主要内容,如果未能解决你的问题,请参考以下文章

Django项目笔记——联机对战的实现

Django项目笔记——(用户系统的实现)

Django上课笔记——菜单模块的实现

django上课笔记1

上课前django需要的前期准备

django上课笔记6