AcWing Django框架课第三节笔记配置docker、git环境与项目创建

1、该系列为ACWing中Linux基础课,已购买正版,课程作者为yxc。
2、为啥写在这儿,问就是oneNote的内存不够了QAQ
3、本课是第三节课,跳了python3的语法课

该课需要租云服务器及配置doker环境

概述

Django是后起之秀,近些年越来越流行,Youtube(月活20亿+)、Instagram(月活10亿+)等公司采用了Django框架。
可以作为Web、App、小程序、AcWing云端App(AC APP)等各种项目的后端。

  • Django优势:
    • 开发效率高,生态完善,有官方社区长期支持
    • 运行效率高(常见误区:python运行效率低,所以python写的应用运行效率低)
    • 项目运行效率瓶颈有很多,比如:数据库查询、网络带宽/延迟、硬盘读写速度等,这些与框架关系不大。
    • 计算密集型的模块可以用C/C++实现,然后编译成动态链接库再import进来。
    • 计算密集型的微服务可以通过thrift等工具对接,微服务的Server端代码可以用C/C++语言实现。
    • 有很多工具可以将Python代码翻译成C/C++,比如Cython、Pypy。AcWing 题库中的不少题目,会发现Python3比Java还快一些。
    • 既适合大公司,也适合个人开发者,平均开发一个Web/AC App只需要半个月-1个月。

课程中会开发一款支持在线联机对战的简易版吃鸡游戏,前后端分离,前端支持AC APP端和Web端。

  • 功能包括:
    • 游戏菜单、游戏设置:熟悉http协议
    • 存储对局信息、账户信息:熟悉数据库操作
    • 在Redis中存储每局对战状态:熟悉内存数据库操作
    • 在线聊天室、实时移动、实时放技能:熟悉websocket协议
    • 在线匹配系统:熟悉thrift和微服务
    • 配置nginx:熟悉nginx部署云服务

配置docker、git环境

参考linux基础课
20000的端口号是方便登陆的,8000的端口号是方便调试;

acs@61f:/var/lib/acwing/docker/images$ scp django_lesson_1_0.tar zxyServer:
	django_lesson_1_0.tar              100% 1475MB  12.0MB/s   02:02    
zxy@VM-20-12-ubuntu:~$ docker load -i django_lesson_1_0.tar 
	e76d0fe78c9e: Loading layer  1.228GB/1.228GB
	c5e2bafd2d0c: Loading layer  3.144MB/3.144MB
	Loaded image: django_lesson:1.0
zxy@VM-20-12-ubuntu:~$ docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0
acs@61:~$ scp .bashrc .vimrc .tmux.conf zxyServer_django:
	.bashrc                            100% 3889   406.7KB/s   00:00    
	.vimrc                             100% 6128   669.3KB/s   00:00    
	.tmux.conf                         100% 1569   164.0KB/s   00:00

项目创建

  • 打开tumx
  • django-admin startproject acapp #创建django项目acapp
  • 配置git:
    • ssh-keygen # 生成密钥用于连接到ac git上面
    • 在git偏好设置中,打开ssh密钥,添加一下刚才生成的公钥
    • git init # 进到acapp中将其配置成git仓库
      打开git,在git上创建一个仓库(项目)按照下面的提示在acs里面配置一下git
    • git config --global user.name xxx
    • git config --global user.email xxx@xxx.com
    • git add .
    • git commit -m "xxx"
    • git remote add origin git@git.acwing.com:xxx/XXX.git #建立连接
    • git push --set-upstream origin master
  • 再打开一个tmux,(一个tmux用于维护控制台,另一个tmux用于开发)跑一下我们的项目 python3 manage.py runserver 0.0.0.0:8000
  • ag ALLOWED-HOSTS #全文搜索,找到这个字段所在位置,并将自己的IP地址添加到里面,便可用 IP地址:8000 打开django页面
  • git 一下代码。注意:在git仓库的根目录下(acapp),vim .gitignore在文件里面写上acapp/__pycache__/再去添加文件的时候就不会再添加这类不必要的文件
  • python3 manage.py startapp game # 创建gameapp
  • 登录django管理员界面
    • ctrl c 先关掉控制台
    • python3 manage.py migrate #同步一下数据库的修改
    • python3 manage.py createsuperuser # 创建管理员账号
    • pyhton3 manage.py runserver 0.0.0.0:8000 # 启动控制台
    • IP地址:8000/admin # 进到管理员登录界面,输入一下刚才创建的账号即可进到管理员界面
  • cd game
  • touch urls.py
  • mkdir templates
  • vim views # 定义一个index函数
  • vim urls.py # 写一下路由
  • cd acapp vim urls.py # 将刚才的路由写到总路由里面
    • models:存储各种数据结构(class等)
    • views:存储函数
    • urls:路由
    • templates:存储网页模板
  • git一下代码,完工

实例:

1、创建项目

zxy@b1986e:~$ django-admin --version
	3.2.8
zxy@b1:~$ django-admin startproject acapp
zxy@b19:~$ ls
	acapp
zxy@b1986ee36b7a:~$ tree .
.
`-- acapp
    |-- acapp
    |   |-- __init__.py
    |   |-- asgi.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- manage.py
2 directories, 6 files

2、 用git 维护项目

zxy@b1986ee36b7a:~/acapp$ git init
	Initialized empty Git repository in /home/zxy/acapp/.git/
# git中生成ssh-key,git其实是用ssh实现的
zxy@b19:~/acapp$ cd 
zxy@b1986ee36b7a:~$ ssh-keygen
zxy@b1986ee36b7a:~/acapp$ ls -a
	.  ..  .git  acapp  manage.py
zxy@b1986ee36b7a:~/acapp$ git config --global user.name "xxx"
zxy@b1986ee36b7a:~/acapp$ git config --global user.email "xxx@outlook.com"
zxy@b1986ee36b7a:~/acapp$ git remote add origin git@git.acwing.com:xxx/acapp.git
zxy@b1986ee36b7a:~/acapp$ git push --set-upstream origin master

3、跑项目

# 0.0.0.0
zxy@b1986ee36b7a:~/acapp$ python3 manage.py runserver 0.0.0.0:8000
访问IP:8000是平台
# IP加入ALLOWED_HOSTS
zxy@b1986ee36b7a:~/acapp/acapp$ vim settings.py
ALLOWED_HOSTS = ["43.138.19.228"]  
此时 ‘acapp/__pycache__/’ 中的文件是python预编译好的,用于python运行的系统代码,不需要传到git上 ;
zxy@b1986ee36b7a:~/acapp$ vim .gitignore
#写入  
*/__pycache__/
zxy@b1986ee36b7a:~/acapp$ git commit -m "modify allowed host"
zxy@b1986ee36b7a:~/acapp$ git push

4、通过app写django自己的页面

zxy@b1986ee36b7a:~/acapp$ python3 manage.py startapp game
zxy@b1986ee36b7a:~/acapp$ tree .                                                               
.                                                                                              
|-- README.md                                                                                  
|-- 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  (关键)定义网站各种数据库中的表,即存储数据结构,例如User这样的class
|   |-- tests.py
|   `-- views.py  (关键)存视图,即函数;每点一个按钮就是调用服务器端的一个函数,这些函数在views.py里实现;
`-- manage.py
# 更新数据库内容
zxy@b1986ee36b7a:~/acapp$ python3 manage.py migrate 
# 创建管理员账号
zxy@b1986ee36b7a:~/acapp$ python3 manage.py createsuperuser
# 登陆管理员页面 http://IP:8000/admin

5、创建自己的页面,制作路由

#django可以创建多个app,但本项目只用一个app
# 现在只是文件,当内容变多可升级为文件夹
# urls是一个路由,用户访问groups(点击)的时候,传入的是一个地址,服务器端需要知道这个地址应该调用哪个函数,因此需要路由。
zxy@b1986ee36b7a:~/acapp/game$ touch urls.py 
# 存网页模板html
zxy@b1986ee36b7a:~/acapp/game$ mkdir templates

文件结构
在views.py中实现最简单的函数
views.py传入一个链接加参数,该函数返回一个字符串(html的网页代码)

  1 from django.http import HttpResponse
  2 
  3 def index(request):
  4     return HttpResponse("Hello world")   

在urls.py中完成
其中path是一个解析的过程,会返回一个函数

1 from django.urls import path
2 from game.views import index
3
4 urlpatterns = [                                                            5 	path("",index, name="index"),
6 ]
表示啥都不解析,index函数,name="index"

传过来之后,如果url啥都没有,就调用index函数返回"Hello world"字符串界面

app的URL还需要写到总的URL里面,在zxy@b1986ee36b7a:~/acapp/acapp$ vim urls.py
如果是game,返回game_app里的内容;

 16 from django.contrib import admin
 17 from django.urls import path, include
 18 
 19 urlpatterns = [
 20     path('game/', include('game.urls')),                                   
 21     path('admin/', admin.site.urls),
 22 ]

可以访问http://43.138.19.228:8000/game/ 打开网页

如果只有一个app可以不加前缀,访问http://43.138.19.228:8000/可以自动访问第一个页面

 16 from django.contrib import admin
 17 from django.urls import path, include
 18 
 19 urlpatterns = [
 20     path('', include('game.urls')),                                   
 21     path('admin/', admin.site.urls),
 22 ]

6、流程概述
用户的请求(网址)——>acapp/urls.py——>
path(’’, include(‘game.urls’)) 即game.urls——>
path("",index, name=“index”) 即index函数 ——>
return HttpResponse(“Hello world”)

7、优化
index函数

  1 from django.http import HttpResponse
  2 
  3 def index(request):
  4 	line1 = '<h1 style="text-align:center">Hello World</h1>' 
  5 	line2 = '<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fp9.itc.cn%2Fimages01%2F20210709%2Fc66a49a0152d4d348e821dcff0f2b539.jpeg&refer=http%3A%2F%2Fp9.itc.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652805774&t=c03cb7179ef649cd10e88eadc5f30428" width = 500> '
  6   	line3 = '<a href="/play/">play game</a>' 
  7     return HttpResponse(line1+line3+line2)    
  • 如果存在两个页面:
    • game/views.py
      1 from django.http import HttpResponse
      2 
      3 def index(request):
      4     line1 = '<h1 style="text-align:center">Hello World</h1>'
      5     line2 = '<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%    2Fp9.itc.cn%2Fimages01%2F20210709%2Fc66a49a0152d4d348e821dcff0f2b539.jpeg&r    efer=http%3A%2F%2Fp9.itc.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=au    to?sec=1652805774&t=c03cb7179ef649cd10e88eadc5f30428" width=700">'
      6     return HttpResponse(line1+line2)
      7 
      8 
      9 def play(request):
     10     line1 = '<h1 style="text-align: center" >游戏界面</h1>'
     11     return HttpResponse(line1) 
    
    • game/urls.py
      1 from django.urls import path
      2 from game.views import index, play
      3 
      4 urlpatterns = [
      5     path("",index, name="index"),
      6     path("play/", play, name="play")                             
      7 ]
    
    第二个页面通过http://43.138.19.228:8000/play/和超链接访问
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值