参考资料:《Python编程:从入门到实践》——【美】Eric Matthes 著 袁国忠译
Python版本:3.9.5
django版本:3.2.6
系统:Windows 10
1. 建立项目
1.1 制定规范
所谓规范,也就是目标。在这个项目中,我们要实现什么功能,用户在这个程序中能够做什么,项目的外观以及用户的界面等等都应包含进规范中。
制定规范的时候要遵循一句话——时刻为用户考虑。
假定我们在这里已经确定了项目的名字为hahaproject
。
1.2 建立虚拟环境
所谓虚拟环境是系统的一个位置,你可以在其中安装Python包,并将其与其他Python包隔离。这种借助虚拟环境所做的隔离操作是有用且必要的。(必要性会在你将项目部署到服务器时体现出来!)
-
第一步:在电脑中某个位置新建文件夹,命名为
hahaproject
(建议新建到D盘,节省C盘空间,这里假设我们新建的这个文件夹的路径是D:\hahaproject
)。 -
第二步:打开终端(快捷键:
Windows键
+R
后运行cmd
),先输入d:
切换到D盘,然后输入cd hahaproject
(注意’cd’后面有一个空格),切换到这个目录。(注意!!!后面所有的代码都是在这个目录下执行的!!!如下图所示。)
-
第三步:使用如下命令创建虚拟环境
D:\hahaproject>python -m venv hhp_env D:\hahaproject>
以上三步执行完毕后,你会发现刚刚创立的空文件夹里出现了文件。我们这里运行了Python模块venv
,并用它创建了伊特名为hhp_env
的虚拟环境。
1.3 激活虚拟环境
使用下面这个命令激活虚拟环境:
D:\hahaproject>hhp_env\Scripts\activate
(hhp_env) D:\hahaproject>
环境处于活动状态之后,环境名会包含在括号内。在这种情况下,我们可以在环境中安装包,并使用安装的包。在hhp_env
中安装的包仅在该环境处于活动状态时才可用!
如果你想停止使用该虚拟环境,可执行命令deactivate
:
(hhp_env) D:\hahaproject>deactivate
D:\hahaproject>
如果直接关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态!
1.4 安装 Django
创建并激活虚拟环境之后,就可以安装Django了(这里使用3.2.6版):
(hhp_env) D:\hahaproject>pip install Django==3.2.6
Collecting Django==3.2.6
...(略)
Successfully installed Django-3.2.6 asgiref-3.4.1 pytz-2021.1 sqlparse-0.4.1
别忘了,Django 只在当前虚拟环境处于活动状态时才可用!
1.5 在 Django 中创建项目
执行下面的命令(千万千万不要忘记末尾的一个空格和一个句点,这个句点让新项目使用合适的目录结构,这样开发完成后可轻松地将应用程序部署到服务器):
(hhp_env) D:\hahaproject>django-admin startproject hahaproject .
(hhp_env) D:\hahaproject>
执行完上述地命令之后,项目就创建成功了,我们使用命令dir
来查看目录下出现了哪些文件:
(hhp_env) D:\hahaproject>django-admin startproject hahaproject .
(hhp_env) D:\hahaproject>dir
···
从输出中可以看到当前目录下有两个文件夹,一个python文件,分别是:hahaproject
, hhp_env
, manage.py
。
下面我们再查看一下文件夹hahaproject
中有哪些文件,在命令dir
后加上文件夹名,中间以空格隔开:
(hhp_env) D:\hahaproject>django-admin startproject hahaproject .
(hhp_env) D:\hahaproject>dir
···
(hhp_env) D:\hahaproject>dir hahaproject
...
从输出中我们可以看到这个文件夹中有五个.py文件,最重要的是settings.py
(指定Django如何与你的系统交互以及如何管理项目),urls.py
(告诉Django应创建哪些网页来响应浏览器请求),wsgi.py
(帮助Django提供它创建的文件,wsgi
是 web server gateway interface 即Web服务器网关接口的首字母缩写)这三个文件。
1.6 创建数据库
Django将大部分与项目相关的信息都存储在数据库中,因此我们需要创建一个供Django使用的数据库。请在虚拟环境处于活动状态的情况下执行下面的命令:
(hhp_env) D:\hahaproject>python manage.py migrate
Operations to perform:
...
Applying sessions.0001_initial... OK
(hhp_env) D:\hahaproject>
再输入dir
查看当前文件夹中的文件可以看到多出来了一个文件db.sqlite3
。
1.7 查看项目
下面来核实Django是否正确创建了项目。为此执行命令runserver
,如下所示:
(hhp_env) D:\hahaproject>python manage.py runserver
输入之后按回车,出现如下图所示的一串代码:
当前服务器处于开启状态,使用的端口是默认端口8000,也可以在输入的时候指定端口,比如:
(hhp_env) D:\hahaproject>python manage.py runserver 8001
运行之后,打开一款Web浏览器,并输入URL: http://127.0.0.1:8000/
,你将看到如下页面:
现在先不要关闭这个服务器。如果要关闭,按Ctrl
+C
即可。
2. 创建应用程序
这一步我们将定义模型并激活模型,创建超级用户并向管理网站注册我们自己创建的模型,使用交互式环境探索存储在项目数据库中的数据。
在完成上面这些操作之前,我们需要建立创建应用程序所需的基础设施。
当然,在前面打开的终端的窗口中应该还运行着runserver
,在Web浏览器中所做的操作,这个终端中都会有一段相应的代码,所以我们需要再打开一个终端窗口,切换到manage.py
所在目录(即刚刚的hahaproject
文件夹内)。然后再激活该虚拟环境,再执行下面的操作。
下面执行命令startapp
:
(hhp_env) D:\hahaproject>python manage.py startapp hahaprojects
(hhp_env) D:\hahaproject>
startapp
后面的是appname,这里我们用的是hahaprojects
。执行该命令后,我们再输入命令dir
查看,可以发现,新增一个文件夹hahaprojects
。再输入命令dir hahaprojects
查看其中的文件。其中最重要的是三个文件:models.py
(在2.1中会用到), admin.py
(在2.4中会用到), views.py
2.1 定义模型
首先需要思考涉及的数据有哪些。
思考完毕后,打开models.py
,你可以在其中创建需要的类,类中包含属性和方法。我们在代码层面创建的类就是所谓的模型。模型告诉Django如何处理应用程序中存储的数据。
这里假设我们创建了一个名为Laughter
的类。代码如下:
from django.db import models
#上面是原来有的代码,下面是要添加的代码
class Laughter(models.Model):
"""笑声"""
owner = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回笑声的所有者"""
return self.owner
2.2 激活模型
要使用模型,必须让Django将应用程序(我们上面创建的hahaprojects
就是一个应用程序)包含到项目中。为此,打开settings.py
(路径为:D:\hahaproject\hahaproject\settings.py
),找到一个名为INSTALLED_APPS
的元组,在其中添加自己创建的应用程序的名字:
--snip--
INSTALLED_APPS = (
--snip--
'django.contrib.staticfiles',
#上面是原本就有的部分,下面是自己添加的部分
# My apps
'hahaprojects',
)
--snip--
下面,需要让Django修改数据库,使其能够存储与我们定义的模型相关的信息。为此,在终端窗口执行下面的命令:
(hhp_env) D:\hahaproject>python manage.py makemigrations hahaprojects
执行后出现- Creat model Laughter
这样的语句表明修改成功。
然后应用这种迁移,让Django帮我们修改数据库:
(hhp_env) D:\hahaproject>python manage.py migrate
...
Applying hahaprojects.0001_initial... OK
如果应用迁移时一切正常,会出现最后一句(OK)。
每当需要修改该项目管理的数据的时候,都采取如下三个步骤:
- 修改
models.py
- 执行命令:
python manage.py makemigrations
app_name
- 再执行命令:
python manage.py migrate
2.3 创建超级用户
Django 允许你创建具备所有权限的用户——超级用户。
为在Django中创建超级用户,执行命令:
(hhp_env) D:\hahaproject>python manage.py createsuperuser
Username:...
Email address:
Password:
Password(again):
Superuser created successfully.
(hhp_env) D:\hahaproject>
按照提示输入用户名和密码(注意:输入的密码不会显示出来,输完之后直接按回车键即可),电子邮件可留为空。最后显示的Superuser created successfully.
则表示创建成功。
2.4 向管理网站注册模型
打开admin.py
,我们需要在这里添加代码行来注册我们创建的类Laughter
,代码行如下:
from django.contrib import admin
#上面是原来有的,下面是要添加的
from hahaprojects.models import Laughter
admin.site.register(Laughter)
然后访问URL:http://127.0.0.1:8000/admin/
,然后输入注册时的用户名和密码,你在网页中能够添加和修改用户和用户组,还可以管理与刚才定义的模型Laughter
相关的数据。
注:如果你看到浏览器提示访问的网页不可用,请确认一下第一个打开的终端窗口中运行着Django服务器。
2.5 向管理网站注册我们自己创建的模型
2.5.1 定义模型 LaughReason
比如我们想再创建一个模型,那么再次打开models.py
,在文件末尾添加一个新定义的类就好了。这里,比如我们定义了一个新类LaughReason
,并通过ForeignKey
将之与前面的Laughter
联系起来,语句如下:
from django.db import models
class Laughter(models.Model):
--snip--
#上面是已有的代码,下面是要添加的代码
class LaughReason(models.Model):
"""笑产生的原因"""
laugh = models.ForeignKey(Laughter,on_delete=models.CASCADE)
reason = models.TextField()#这里我们不限制字数
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回原因的字符串表示"""
if len(self.reason) > 50:
return self.reason[:50] + "..."
else:
return self.reason
2.5.2 迁移模型LaughReason
由于我们添加了一个新模型,因此需要再次迁移数据库。过程和2.2 末尾加粗部分一样,执行如下指令:
(hhp_env) D:\hahaproject>python manage.py makemigrations hahaprojects
Migrations for 'hahaprojects':
hahaprojects\migrations\0002_laughreason.py
- Creat model LaughReason
(hhp_env) D:\hahaproject>python manage.py migrate
Operations to perform:
--snip--
Applying hahaprojects.0002_laughreason... OK
生成了一个新的迁移文件——0002_laughreason.py
,他告诉Django如何修改数据库,使其能够存储与模型LaughReason
相关的信息。
2.5.3 向管理网站注册LaughReason
我们还需要注册模型LaughReason
。为此,将admin.py
修改成下面这样:
from django.contrib import admin
from hahaprojects.models import Laughter, LaughReason#注意这里又加了新的东西
admin.site.register(Laughter)
admin.site.register(LaughReason)
返回到http://127.0.0.1:8000/admin/
中,刷新一下,你会发现hahaprojects
下列出了LaughReasons
。
2.6 使用交互式环境探索存储在项目数据库中的数据
这里我们将使用Django shell
。Django shell
是测试项目和排除其故障的理想之地。
使用下面的命令进入shell会话:
(hhp_env) D:\hahaproject>python manage.py shell
>>>
2.6.1 获取模型的所有实例
我已经事先创建了两个实例,owner分别是a和b。
(hhp_env) D:\hahaproject>python manage.py shell
>>> from hahaprojects.models import Laughter
>>> Laughter.objects.all()
<QuerySet [<Laughter: a>, <Laughter: b>]>
QuerySet
称为查询集,是一个列表。
2.6.2 查看分配给每个主题对象的ID
>>> laughters = Laughter.objects.all()
>>> for laughter in laughters:
... print(laughter.id, laughter)
...
1 a
2 b
知道对象的ID后,就可获取对象并查看其任何属性。
2.6.3 由对象ID获取对象并查看属性
>>> t = Laughter.objects.get(id=1)
>>> t.owner
'a'
>>> t.date_added
datetime.datetime(2021, 8, 11, 13, 29, 23, 647811, tzinfo=<UTC>)
2.6.4 查看与Laughter相关的LaughReason
>>> t.laughreason_set.all()
<QuerySet [<LaughReason: no reason>]>
为通过外键关系获取数据,可使用相关模型的小写名称+_
+set
。
注:每次修改模型后,都需要重启 shell(输入exit()
或者按Ctrl
+Z
退出shell),这样才能看到修改的效果。
未完待续……
下篇内容预告:
3. 创建主页
4. 创建其他网页
链接指路:
下一篇:【Django入门】使用Django开发项目(续)