django 安装及简单案例

一、在 anaconda 中新建运行python的虚拟环境 tuesday,因为今天是星期二,所以起个名字 tuesday,打开虚拟环境目录,可以看到:

如上,虚拟环境里已经包含了python解释器python.exe,另外,其它文件的作用如下:

DLLS: python的动态链接库,跟编译器有关,和python编程关系不大

Include: python 编译器的C语言头文件源码

Lib: 这个库很重要,是python的标准库,你扩充的库都安装在这里面的site-packages文件夹里。

Libs: python的内置库

Scripts: 项目用到的各种脚本,比如说,安装python时自带的pip.exe在这个文件中。

Tcl:包含python默认内置的GUI工具Tkiner

Tools目录:Python 提供的一些工具

二、安装django

命令:pip install django

注解:这里我们使用了pip命令,pip 命令存放在虚拟环境的Scripts文件夹里,并在虚拟环境创建的时候对其路径设置了环境变量,所以我们能够在命令行窗口直接使用它。pip 命令默认去python官方维护的PyPI库中寻找要安装的库,你也可以指定去PyPI的镜像站安装,比如去PyPI的清华镜像站安装:pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

看一下django的安装目录,在Lib/sit-packages文件里:

打开django文件,这就是django框架的源代码:

django作为web框架,集成了web服务相关的功能,比如http文件夹下的request.py和response.py分别实现了web的请求和响应,db文件夹实现了连接后台数据库的相关功能,urls实现了web访问路径寻址的功能等。

三、在django框架下新建一个web项目,取名为firstproject

在命令行界面进入我们存放项目的文件路径,比如说我们把项目存放在E盘:

命令:django-admin startproject firstproject

注解:这里我们使用了django-admin命令,这个命令是存放在虚拟环境目录下的Scripts文件夹中,跟pip命令一样。

进入e盘,看一下新建的firstproject项目:

打开firstproject目录:

这里面有两个文件,一个是firstproject项目目录,一个是manage.py文件,firstproject项目目录里面存放是是项目的配置文件,manage.py是可执行命令,用来操作该项目,我们在命令行中进入e盘下的firstproject目录,就可以使用manage.py命令了。

我们先看一下e盘firstproject目录下的firstproject项目目录:

 

 __int__.py是firstproject包的初始化文件,用来标识这是一个pakage,我们无需理会。

asgi.py和wsgi.py是负责网络请求和响应的,在之后做项目过程中,一般不需要修改。

settings.py是项目的配置文件,包括项目的应用注册,中间件注册,数据库配置,网页静态文件配置等。

urls.py是项目的url文件路径配置文件。


四、完成数据库的迁移

django框架默认使用SQLite数据库,这是一款轻量级数据库。django数据库的配置文件在firstproject项目目录下的settings.py文件中:

 

运行命令:

python manage.py migrate

django框架读取settings文件中的各个内置应用的models.py文件,在SQLite中建立数据库和数据表。settings.py文件中各个内置应用设置如下:

 

 如上各个内置应用主要设置了用户信息表,管理员信息表等。

五、django框架提供了后台管理功能,设置后台管理:

运行命令:

python manage.py createsuperuser

按照提示一步步输入管理员用户名、管理员邮箱、管理员口令等。

六、启动服务器:

运行命令:

python manage.py runserver 80

 在浏览器中访问:127.0.0.1 就可以看到前台页面了

 

在浏览器中访问:127.0.0.1/admin就可以访问后台管理页面了

 

通过键盘组合 CTRL-BREAK,停止django web服务,进入下个步骤。

 七、进一步改进

由于django默认使用的数据库是SQLite数据库,这是一款轻量级服务器,在业界用得更多的是oracle、sqlserver、DB2等收费数据库或者mysql、postgresql等免费数据库,由于很多互联网公司都在使用mysql数据库,因此,我们将firstproject项目挂接的数据库改为mysql.

(1)打开mysql终端,创建firstdatabase数据库,用于将来由firstproject项目挂接。

 

 

(2)在firstproject项目目录中的settings.py文件中更改数据库设置,将DATABASE项改为:

 

 如上, 数据库的名称、用户名、口令等要根据你个人对mysql的配置相应的在settings.py文件中做修改。

(3)在第(2)中,我们可以看到,项目使用的数据库引擎(‘ENGINE’)是‘django.db.backends.mysql’,该引擎实现了将项目的models模型转换为mysql语句,为了使mysql语句作用于mysql数据库,我们还需要一个mysql数据库驱动,这里我们使用mysqlclient驱动:

运行下载mysqlclient驱动命令:

pip install mysqlclient

(4)进行数据迁移,并创建管理员账号:

运行命令:

python manage.py makemigrations

python manage.py migrate

python manage.py createsuperuser

(5)开启web服务

运行命令:

python manage.py runserver 80

可以看到,这个系统起来了。

九、开发我们的应用 firstapp

(1)在firstproject项目中创建我们的应用,比如说我们要做一个网站,那么这个网站就是一个应用,我们取名为firstapp

进入manage.py所在的目录firstproject,使用python运行manage.py文件创建firstproject项目下的应用firstapp

命令:python manage.py startapp firstapp

 

 我们进入firstapp目录,看一下里面的文件:

 

 migrations目录是存放后台数据库迁移相关的。

admin.py是用来将该应用注册到项目的后台的,也就是说我们的项目如果需要后台操作,那么就要在admin.py里面注册。

models.py是用来操作后台数据库的模型文件。

views.py是用来控制前台和后台交互的控制文件。

(2)将应用注册到项目的配置文件中,打开项目配置文件settings.py,做如下配置:

 

 

(3)新建数据模型,假设我们要做一个信息发布网站,在后台发布信息,在前台显示。

前面我们已经在mysql里面新建了数据库firstdatabase,现在我们要做的事情是在firstdatabase里面新建一个表(table),这个表里面设置三个字段,分别是message(VARCHAR(200)),author(VARCHAR(20)),pub_date(DATE)

django是MTV框架,M代表model,用来操作数据库,我们去firstapp目录下的models.py编写代码实现上述要求。

在models.py文件中,定义一个class代表着在firstdatabase里面创建一个表,我们命名这个表为Message,class内部的每一个属性代表message表中的一个字段,根据要求,我们需要在 class message 中定义三个属性:message,author,pub_date

结合我们要实现的上述要求,进一步了解models.py文件:

每一个class都是继承的django.db.models.Model类:

from django.db import models

class Message(models.Model):

在class Message中定义数据表的字段:

message = models.CharField(max_length=200)

author = models.CharField(max_length=20)

pub_date = models.CharField('发布时间')

如上,message是models模块下的CharField类的一个实例对象,同理,对于author、pub_date也是这样理解。

另外,CharField类是在django\db\models\fields\__ini__.py模块中定义的,去源码看CharField定义:

class CharField(Field):

可以看出,CharField类继承了Field类,分析django的目录结构,可以看到Field类同样是在django\db\models\fields\__ini__.py模块中定义的,其定义为:

class Field(RegisterLookupMixin):

可以看出,Field类是继承的RegisterLookupMixin类,分析django的目录结构,可以看出RegisterLookupMixin类是在django\db\models\query_utils.py模块中定义的,其定义为:

class RegisterLookupMixin:

至此,我们已经深入理解了用来定义数据库message字段的CharField类的来龙去脉,实质上,CharField类对应了mysql数据库新建字段时对字段数据类型的定义 VARCHAR

再拓展一下,mysql的数据类型如下:

 

 django中的django\db\models\fields\__ini__.py模块定义的数据类型的类,如下所示:

 

 

 

 django models 数据类型的类与mysql数据类型对应关系可以参考如下链接:

https://www.cnblogs.com/bladecheng/p/11372267.html

重点提示一点:

django 定义mysql数据库字段属性的类都放在django\db\models\fields\__ini__.py目录下,需要的时候可以查看源代码。

最终,我们的models.py文件截图如下:

在虚拟环境端运行数据库迁移命令,完成上图所示models.py文件对mysql数据库的操作:

运行命令:

python manage.py makemigrations

python manage.py migrate

我们打开mysql中firstdatabase数据库,可以看到新建了数据表firstapp_message,使用desc firstapp_message命令,查看该数据表的结构如下:

 

 

 

 (4)将我们的Message模型注册到firstapp的后台管理页面,打开firstapp/admin.py, 输入语句: admin.site.register(Message),如下:

 

 之后,我们就可以再后台页面看到Message模型了:

 

 之后,我们就可以在后台增删改查消息了,这就实现了通过网站后台直接操作数据库。

(5)到目前,我们能够用后台页面对mysql数据库进行增删改查工作,下一步我们还需要让普通用户能够通过前台页面访问数据库message、author、pub_date等内容,主要涉及三方面内容,一是配置用户浏览器访问路径,主要配置URL相关文件,二是设计用户浏览器请求的处理逻辑,主要是通过在views.py文件内编写代码实现,三是系统返回响应页面给用户浏览器,主要是在templates目录下编写html文件,由views.py代码调用并返回给用户浏览器。

先来配置url:

在firstproject项目目录下的urls.py文件中的urlpatterns列表中定义浏览器的访问路径,urlpatterns列表中的元素是path函数,每一个path函数代表着接受一条路径访问,并做相应的处理,对于path函数,做如下说明:

通过查阅path函数源代码,可以看出,paht函数 具有四个参数,两个必需参数:routeview,两个可选参数:kwargsnameroute参数是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项,route参数是以字符串形式给出的,比如我们要设置网站的首页网址为127.0.0.1,那么首页的path函数为path('',...),同样,如果我们要设置网站的首页地址为127.0.0.1/index.html,那么首页的path函数为path('index.html'...)。view参数是一个视图函数,它是定义在views.py文件里的,当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入view参数对应的view函数中。我们对url的配置如下:

 

 上面第一个path是我们自己配置的,第二个path是系统默认给的,用来访问后台页面的网址。对于第一个path,我们看到,它的第二个参数是调用了views.py模块的index函数,而这个views.py模块是通过from firstapp import views引进来的,其实这个逻辑是这样的,当用户访问127.0.0.1的时候,path函数会交给firstapp.views.index函数处理,所以我们进入下一个话题views,在 firstapp中打开views.py文件,新建一个index函数,这个函数的功能是读取mysql数据库的信息,然后把这些信息写入到一个html页面,并返回给用户浏览器。我们先看一下这个index函数的定义:

 

 让我们解析一下上图:

首先,将render函数和firstapp.models模块里的Message类引进来,render函数是用来给用户浏览器返回一个html页面的,Message类是用来读取mysql数据库中firstapp_message数据表信息的。我们定义的index函数接收一个参数,我们习惯于将之命名为request,在我们这个场景下,request作为形参,接收的实参是path函数传递过来的空字符串' ',在index函数体内,message_list变量的赋值是Message类的属性objects调用的all()方法返回值的列表化,这句话听起来很拗口,实质上message_list的作用是把mysql数据库管理系统下的firstdatabase数据库下的firstdatabase_message数据表的内容读进来,我们看一下这其中的具体机制:首先,Message类是在firstapp目录下的models.py文件里定义的,继承了django.db.models.Model类,我们在firstapp目录下的models.py里定义Message类的时候,django会自动给Message类生成一个objects属性,objects属性是django.db.models.manager.Manager类的一个实例,是Model对数据库进行操作的接口,它内部定义了很多方法,其中all()方法的作用是返回一个QuerySet对象,在我们当前场景下,也就是返回firstdatabase数据库下firstapp_message数据表中的所有内容,我们用list()方法将QureySet对象列表化,以便于从列表中逐行读取数据库中的内容。接着我们看一下index函数中的我们定义的contex变量,contex变量是一个字典,它的key是我们前台html文件调用的名称,它的value值是key对应的变量,在当前场景下,就是我们把从数据库读取的条目封装到列表message_list中,并返回给前端html文件的message_list变量。最后,我们用renturn 返回了一个render函数,这个函数是定义在django.shortcuts模块中, 在这里它有三个参数,第一个参数是对应的index函数接收的request参数,第二个参数和第三个参数的意思是将contex变量返回给index.html

目前,我们还没有建立index.html文件。下一步我们建立index.html文件,按照django的工作机制,需要我们在firstapp下建立templates目录,然后在temlpates目录下新建index.html文件,在当前场景下,我们建好index.html文件后,在里面写入如下内容:

 

 

 让我们解析下上图:

{%......%}是django的html标签,代表标签里面是python语句,{{......}}标签代表里面是python变量,可以看出,前端html页面就是接收views.py中的index函数返回的contex中的message_list,并使用for循环迭代输出message_list中的所有行,并通过item调用每一行的每一个字段打印到index.html页面中的列表中。

 

 

十、我们的信息发布墙项目到此就完成了,我们可以在本机浏览器输入127.0.0.1/admin进入后台,点开message输入信息,其它用户输入127.0.0.1就可以在前端页面看到我们发布的信息了。当然了,如果把这个项目部署在公网上,假设公网IP地址是xxx.xxx.xxx.xxx,那么我们通过访问xxx.xxx.xxx.xxx/admin就可以发布我们要发布的消息,互联网用户就可以通过访问xxx.xxx.xxx.xxx来接收我们的消息了。这个案例很简单,而且没有进行前端美化,但是我们的重点是详细介绍django这个MTV框架的工作原理,以后同学们做项目的时候,可以根据自己的需要查阅django的文档,实现自己的需求。

posted @ 2022-05-13 15:25  星辰大海日夜兼程  阅读(282)  评论(0编辑  收藏  举报