创建项目的命令为django-admin startproject 项目名
安装Django后,默认即安装了django-admin,我们可以在$PATH_HOME/Scripts/
目录下看到django-admin.exe
和django-admin.py
两个文件。
打开django-admin.py
文件可以看到,这条命令是通过django.core.management
的execute_from_command_line()
来创建项目的。
我们可以由此深扒代码,但在此不多赘述。在$PATH_HOME/Lib/site-packages/django/core/management/commands/startproject.py
中我们我们可以发现这条命令的作用是创建一个Django项目的目录结构。
创建应用的命令为python manage.py startapp 应用名
在构建出项目的目录结构后,我们可以看到目录中有一个项目同名文件夹和manage.py
文件,上述命令就是通过这个文件来执行的。打开manage.py
文件可以看到,这条命令也是通过django.core.management
的execute_from_command_line()
来创建应用的。
在$PATH_HOME/Lib/site-packages/django/core/management/commands/startproject.py
中我们我们可以发现这条命令的作用是创建一个Django应用的目录结构。
真正网站所有运行的逻辑都是在使用startapp创建出来的APP文件夹中。使用这样的方式是让网站的每一个功能都成为一个单独的模块,方便网站的开发者在不同的网站中重复使用,这也是Python程序设计语言中reuse概念的应用。
创建数据库和Django间的中介文件的命令为python manage.py makemigrations App名
在上一篇博客Django新手入门(一)——了解Django和网站中我们有提到过,Django以类的形式定义数据模型,ORM将模型与关系数据库连接起来,实际上就是以这样一条命令来产生中介文件实现model类和数据库的连接的。
添加数据库的命令为python manage.py migrate
(如果无特殊设置,默认使用轻量级的SQLite)
这个命令和上两条命令类似,不同之处在于传参为migrate
,所以我们去$PATH_HOME/Lib/site-packages/django/core/management/commands/migrate.py
中可以发现这条命令是在同步更新数据库的内容。
启动服务的命令为python manage.py runserver IP:port
(如果不写ip和port默认以127.0.0.1:8000来起服务)
这个命令和之前的命令类似,不同之处在于传参为runserver
,所以我们去$PATH_HOME/Lib/site-packages/django/core/management/commands/runserver.py
中可以看到命令做了什么。看过代码我们会发现这条命令是在为开发启动一个轻量的web服务。
我们在测试网站执行时,如果我们对网页的内容有任何改动(更改到系统的设置例外),Django都会主动进行检测并重载更新,网站的内容马上就会呈现出更新后的结果。
创建管理员账号及密码的命令为python manage.py createsuperuser
。
这条命令需要Django项目启用django.contrib
模块(默认启动),在$PATH_HOME/Lib/site-packages/django/contrib/auth/management/commands/createsuperuser.py
中我们我们可以发现这条命令的作用是创建超级用户。
admin是Django默认的数据库内容管理界面,修改App名/admin.py
将model纳入管理就可以通过django自带的图形界面来管理数据了。
在刚刚的命令介绍中,我们已经见过这个文件了。manage.py
是Django用来管理网站配置的文件,是一个接受命令行指令的工具程序,Django所有命令都是执行此程序,平时我们不会去修改它,只要确保能够执行就可以了。
刚刚有提到过,在构建出项目的目录结构后,我们可以看到目录中有一个项目同名文件夹和manage.py
文件。在项目同名文件夹中,有这样几个文件:__init__.py
,settings.py
,urls.py
和wsgi.py
。wsgi.py
是和虚拟主机中的网页服务器(如Apache)沟通的接口,中间的设置要等网站上线才会用到。我们在此先不做详细介绍。
url.py
用来设置每个URL的网址要对应的函数以及对应的方式,通常是创建新的网页时要先编辑的文件。
这个文件涉及的内容较多,我们会在后期的文章中进行详细介绍。
settings.py
是此网站的系统设计所在的位置,新创建的网站都要先打开这个文件,进行编辑设置的操作。
在输入创建应用的命令后,我们创建了一个Django应用的目录结构。目录中包含migrations
文件夹,__init__.py
,admin.py
,apps.py
,models.py
,tests.py
和views.py
。Django的MTV(大约可以模拟到MVC)架构为了把数据抽象化,把数据的存取和显示区分为Model、Template以及View,分别对应models.py
、template
文件夹以及views.py
。
models.py主要负责定义要存取的数据模型,以Python的class类来定义,在后端Django会自动把这个类中的设置对应到数据库系统中,不管使用的是哪一种在数据库。这样的好处是把程序和数据库之间的关系以中介层作为连接的接口,日后如果需要更换数据库系统,可以不更改程序的部分。
在Django中使用数据库步骤为:
models.py
中定义需要使用的类(继承自models.Model)python manage.py makemigrations app名
创建数据库和Django间的中介文件python manage.py migrate
同步更新数据库的内容在models.py
中定义的类中包含:
关于models.py
、template
文件夹以及views.py
的更多细节,我们在后续的文章中会继续介绍。
在models.py
中对数据模型进行定以后,需要对数据进行存取,这样的程序逻辑则是在View中,,也就是在view.py
中处理。
也可以在views中编写程序,让网页的排版更加美观。不过,这并不是明智的做法,因为显示的样子和如何存取数据或资料内容必须分开才比较容易维护,而且在大型合作项目中,这两部分工作通常是由不同的人员负责的,放在一起会造成开发上的困难。因此,正确的做法是在views.py中把数据或资料准备好,然后放到template中,让template中的.html文件负责真正显示的工作。
如何把取得的数据用美观且有弹性的方式输出,是在Templates中处理。templates
不是一个文件了,而是一个文件夹,里面存放着多个模板文件。每一个输出的网页都可以准备一个或一个以上对应的模板,这些模板以.html
的文件形式存储在指定的文件夹中(一般会命名为templates
),当网站有数据需要输出的时候,通过渲染函数(render,或称为网页显示)把数据存放到模板指定的位置中,得到结果后再交给HttpResponse输出给浏览器。
templates的基本步骤:
settings.py
中设置模板文件夹的位置urls.py
中创建网址和views.py
中函数的对应关系.html
文件,做好排版并安排数据要放置的位置views.py
中取数据或资料render
函数把数据送到指定的模板文件中几乎所有商用网站在每一页都会有一些共同的元素以强调网站的风格,如果每一个网页都分开设计,不仅要花许多不必要的时间和精力,而且网页有所变动时,也很难同步到所以到网页共同的部分。因此,把每一个网页共同的部分独立出来成为另一个文件,才是最正确的做法。Django就提供了共同模板的方式处理这部分机制。使用include
和extend
关键字能很好地应用这一特性。
一般来说,网站中的图像文件大部分会被放置在image文件夹下,.css和.js文件会被放在css和js文件夹下。传统的网站系统只要指定这些文件夹在网址上,就可以顺利存取了。但是这些文件相对于.py的文件来说属于不需要被另外处理的静态文件,为了网站运行的效率,Django把这个类型的文件统称为static files(静态文件),另外加以安排。因此,为了能够在网站中顺利地存取这些文件,需要在setting.py中特别指定静态文件要放置的位置。
本文总结了在Django项目开发中常用的命令和文件,对于新手来说可能还有点晦涩,但却是值得阅读和记忆的。在后面更深层次的了解和开发中,会常用到这篇文章中写到的命令和文件,如果有什么不懂,可以返回阅读这篇文章以加深理解。