Django 框架课
2. Docker、Git环境搭建与项目开发
Docker、Git环境搭建
- 先从AC Terminal中的
/var/lib/acwing/images/
下把搭配好Django的镜像scp到自己的服务器上。 - 在自己的云服务器平台上将自己的20000和8000端口开放
- 再在自己服务器上,
docker load -i
把镜像放到自己的服务器上。然后docker run -p 8000:8000 -p 20000:22 --name django -itd django_lesson:1.0
创建并运行一个容器。(8000:8000 端口是开放Http,20000:22 端口是开放ssh) - 找一个地方作为开发Django项目的路径,并在ACGit上创建仓库,将这个路径作为git的目录,
git clone ******
,至此已经完成环境搭建
项目开发
项目创建
建议开tmux开发和运行项目
- 创建一个项目
django-admin startproject acapp
,会创建一个文件夹acapp
,树形结构如图(可以先不用看): - acapp
- acapp
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
manage.py
- acapp
- 打开
settings.py
,找到ALLOWED_HOSTS=[]
,修改成ALLOWED_HOSTS=["自己的服务器的公网IP"]
- 开启项目,运行网站
python3 manage.py runserver 0.0.0.0:8000
,登上自己的网站自己的服务器公网IP:8000
,看到Django的页面的小火箭即成功运行,下文的网站即自己服务器的公网IP:8000
- 上传到自己的Git上的时候,如果不想上传某些文件比如
__pycache__
,可以在自己的Git路径上创建一个.gitignore
,按照格式填入不想上传的东西的名字即可,比如__pycache__/*
创建分支
- 在一级
acapp
文件夹下,python3 manage.py startapp ***
,***
是可以自定义的app名,这里用game
示例,这时候会多一个文件夹game
,树形结构如图 - game
__init__.py
admin.py
,存储管理员页面apps.py
,(y总说用的不多)- migrations,存数据库的
__init__.py
models.py
,用于定义网站的数据类test.py
views.py
,写函数的
- 进入
网站/admin
进入自己的管理员页面,不过在此之前要将所有修改更新进数据库python3 manage.py migrate
,再开启运行网站,之后如果需要更新,Django在即将开启运行网站的时候会提醒,所以不用刻意去记 - 创建管理员账号,在后台
python3 manage.py createsuperuser
,创建超级用户,之后根据提醒一步一步走即可,在管理页面登录即可
最关键的来了(y总说的):models,views,urls,templates
这部分建议边照着做边学,在示例的基础上可以再加点料,加深理解
每个app里面有这四个东西
- models,数据类库,定义各种数据类型
- class User
- ……
- views,实现各种函数,做成文件夹,防止多个函数放进同一个文件里面,比较麻烦
- ……
- urls,路由库,用于解析访问网站时要干嘛
- templates,存html
game/views.py 示例
from django.http import HttpResponse
def index(resquest):
return HttpResponse("我的第一个网页!!!!")
也就是,index()
函数在接收到一个用户的请求的时候,就会被调用,并返回响应
game/urls.py 示例
from django.urls import path
from game.views import index # 从game/views.py 里面调用index函数
urlpatterns = [
path('', index, name = 'game_index')
]
这其中,path('PATH', function, name)
的含义是,在用户访问网站的时候,如果是网站/game/PATH
,就会调用function
,名字为name
,这是在/game/
目录下的调用,所以这个'PATH'
是在/game/
的基础上的相对路径,所以他的绝对路径是网站/game/PATH
。
acapp/urls.py 示例
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('game.urls')),
path('admin/', admin.site.urls)
]
这其中,path('PATH', include('game.urls'))
的含义是,在用户访问网站的时候,如果是网站/PATH
,就会走到/game/urls
,并根据/game/urls.py
来跑路由,就是说,用户在访问网站/
的时候,由于此时调用的函数是include('game.urls')
,所以访问网站/
相当于根据game/urls
访问。所以,从这里也可以明白为什么网站/admin
会跳转到管理员页面。
综上,访问网站/
的时候,首先是相当于访问网站/game/
,然后根据/game/urls.py
,此时对于game/urls.py
来说访问的相对路径是''
,所以会调用views.index
,然后就会看到网页:
我的第一个网页!!!!
如果game/views.py是这样写的:
from django.http import HttpResponse
def index(request):
line1 = '<h1 style="text-align: center">我的第一个网页!!!!</h1>'
return HttpResponse(line1)
就会看到这样的网页(源代码):
<h1 style="text-align: center">我的第一个网页!!!!</h1>
正常访问是一个居中一级标题的我的第一个网页!!!!
,如果是源代码就会是上述情况,所以HttpResponse()
“本质上”是将参数里的字符串写进.html中。
如果要在网页上放图片,字符换成<img src='URL' width='2000'
,其中URL
是图片的链接,在网上找个图片,把图片的URL
复制过来即可,width
是图片大小。
如果要写跳转链接(超链接):
<a href="https://www.acwing.com">acwing</a>
网页会出现一个可点击的字符串acwing
,点击即跳转www.acwing.com
。<a href='LINK'>string</a>
的含义是,定义一个跳转链接,并显示成string
,在网页点击的时候会跳转到LINK
妈的,真的真好
之前没用过html或者CSS,对两者的关系和在Djangle中的应用还有些晕。先谢谢啦
每次都这么
高质量
,点赞
、收藏
大大的有#
太爱了,这逻辑无敌!!!!!!!
## Orz
写的好棒啊!
自己看没搞懂逻辑,看题主解析懂了。另外想多请教一下, HttpResponse()中Line定义的一串字符串是用CSS 写的吗还是用html写的?这里哪一部分用到了CSS, 哪一部分用到了html,还不是很明白。谢谢
HttpResponse()里面就用html的语法。返回的响应就直接用这个字符串作为页面,转换成html的
谢谢解答!非常感谢XD
Orz