Django是一个开放源代码的Web应用框架,由python写成。采用了MTV的框架模式,即模型M,视图V、模版T。
在创建Django项目前,需要先安装 django库,安装方式如下:
创建Django项目有两种方法,即终端创建和基于Pycharm创建。
1) 终端创建
在终端中创建是以命令方式创建,它将创建出标准目录结构,创建步骤如下:
第一步:打开CMD终端;
第二步:在CMD终端中进入项目存放的目录;
第三步:执行命令创建Django项目,执行命令如下。
django-admin startproject 项目名
执行上述命令后,会在当前目录下创建项目名为DjangoTest2的Django项目,目录结构如下:
2) 基于Pycharm创建
基于Pycharm创建Django项目比命令方式创建要简单一些,它会自动的创建标准目录结构(手动创建结构)外,还会给添加一些辅助目录结构(多余的目录和文件可以删除)。注意,使用Pycharm来创建Django项目,需要使用企业版的Pycharm编译工具。
具体的创建步骤如下:
第一步:点击New Project按钮创建新项目。
第二步:创建Django项目,并设置路径和解析器。
点击Create按钮后,会在Pycharm编译工具中创建以下目录结构。
1) app简介
当项目足够大时,例如路由或者静态文件、模板都写在了一起,比较臃肿,因此,我们可以创建app应用进行独立开发(分模块开发)。
app是python中分模块开发的模块,它类似一个目录把一批次的资料给汇总,在一个Django项目中有多个app,每个app中都有独立的资源。
如果开发比较简洁,用不到多个app,一般情况下项目可创建在1个app中。
大型Django项目的app结构如下图:
2) 创建app
创建app需要在Pycharm终端中执行,执行代码如下所示。
执行上述代码后需要刷新,项目结构中才会出现app目录,app目录结构如下图所示。
app创建后需要注册才能正常使用,具体步骤如下。
第一步:在setting.py文件INSTALLED_APPS数组中添加app路径。
其中,App001Config是apps.py文件中的一个类,它是该文件的入口。
第二步:在urls.py文件中编写URL和视图函数对应关系。
在urls.py文件中urlpatterns数组中添加对应路径,该数组中的每一个元素即是一个对应路径,其格式如下。
其中”index/”是访问的URL路径,(假如访问路径是www.xuedao.com/index),index将自动拼接在www.xuedao.com域名下。
views.index是对应执行的函数,views是app下面的views.py文件,使用前需要导入该文件,如下代码所示。
index是views.py文件中的函数,该函数需要自己创建,如下代码。
详细代码如下图所示:
其中views.py视图文件是用来编写执行事件的函数文件,它类似于JavaWeb中的控制层。
编写多个对应关系。
第三步:启动Django项目
启动Django项目有两种运行方式:
第1种:命令行方式;在Pycharm终端执行以下命令即可运行。
第2种:Pycharm启动方式;点击Pyhcarm中绿色运行按钮即可,如下图所示。
注意:运行后如果出现“Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。”错误。说明端口号被占用,一般情况酷狗音乐与Django的冲突了,只需要停止酷狗音乐即可。
第四步:访问Django页面
待Django服务器启动之后,即可在浏览器URL地址栏中输入127.0.0.1:8000/index访问Django页面,如果出现以下内容则Django项目搭建成功。
如果需要跳转到HTML页面,在函数返回值时返回render(request, “html名”)即可,Python编译器会自动的在当前app的templates目录(自已创建)下查询该HTML页面,如果成功匹配则返回到该页面,如果没有找到匹配的HTML页面则报错。
如果当前的app的templates目录中没有找到指定的HTML文件,Python将到其它的templates目录中查找,如果当前app的templates目录中有指定的HTML文件,其它templates目录中也有指定的HTML文件,则会优先使用当前app的templates目录中的HTML文件。
在开发过程中,图片、CSS、JS均称为静态文件,静态文件必须存放在当前app的static目录(自己创建)中。
在HTML文件中使用静态文件前需要先使用{% load static %}声明,引用时也需要使用{% static ‘xx’%}来引用,如下图所示。
静态文件路径可以在settings.py文件的STATIC_URL属性中配置。
Django模板即定义了Django在函数和HTML页面使用的基础语法。
1) 从函数中传值到HTML页面,并在HTML页面中将数据展示出来。
传入的数据是字典格式进行传递,HTML页面中根据传入字典的key来获取对象的值。字典的值可以为字符串、数组、字典等类型。
2)循环语句
传入数据值为数组时,HTML页面中可以通过下标获取值,也可以通过循环来获取值,示例如下。
3)传入数据值为字典时
4)传入数据值为字典集时
5)条件语句
if条件分支语句使用{ % if k==”” % }开始,{ %endif% }结尾,示例如下图。
if ... else条件分支语句使用{ % if k==”” % }开始,随后跟着{ % else % },最后以{ %endif% }结尾,示例如下图。
多条件分支语句使用{ % if k==”” % }开始,随后跟着多个{ % elif % },最后以{ %endif% }结尾,示例如下图。
1)请求
在views.py文件中每个函数里都有一个request变量(命名任意),其它该变量接收的是request对象,它封装了用户发送过来的所有数据。该对象提供了一系列的方式用于获取用户发送过来的数据,常用方式如下所示。
其中:“后台响应数据”字符串内容是返回给请求者。
2)响应
响应就是后台返回给请求者的数据,在views.py函数中使用return来响应数据,且有多种响应方式。
a.响应字符串给请求者,示例如下:
b.将数据响应给指定的页面,示例如下:
其中request是请求对象,xx.html是指定的HTML页面,“数据”是响应的数据,该数据是字典类型。
reander()读以HTML的内容,并渲染后转换成HTML字符串,然后把HTML字符串返回给用户浏览器。
c.重定向
如果要跳转到外部网站,可以使用redirect(str)函数进行重定向,其中str是重定向的URL地址,该地址只能为外部网站的URL地址,示例如下所示。
执行重定向后,浏览器上的URL地址将变为指定的URL地址。
用户登录案例:
在Django中可以使用pymysql原生方式操作mysql数据库,也可以使用ORM框架方式操作数据库,在实际开发中,一般使用ORM方式操作数据库,这种方式是对pymysql高度封装,操作更加的简捷、方便。
使用ORM框架需要先安装mysqlclient第三方模块,安装方式如下:
ORM框架主要有两个功能,1)操作数据库中的表(不能操作数据库);2)操作表中的数据。
1)数据数据库中的表
a.连接数据
操作表之前需要先连接数据库,数据库连接在settings.py文件的DATABASES属性中设置,如下图。
b.操作表
操作表主要是对表的创建、删除和修改操作。
操作表在app的models.py文件中操作,操作前需要导入models库,如下所示:
然后在创建一个自定义类(表名 = app名 + 类名),在类中使用models库中的方式创建字符,如下代码:
生成的数据库表对应说明:
数据库表名
执行生成表命名,在Pycharm终端中执行makemigrations,用于生成一个临时文件,执行migrate,用于根据临时文件生成数据库表,具体命令如下:
第一步:python manage.py makemigration
第二步:python manage.py migrate
2)操作表中的数据
在Django中可以使用pymysql原生方式操作mysql数据库,也可以使用ORM框架方式操作数据库,在实际开发中,一般使用ORM方式操作数据库,这种方式是对pymsql高度封装,使操作更加的简捷、方便。
使用ORM框架需要先安装mysqlclient第三方模块,安装方式如下:
pip3 install mysqlclient
操作表之前需要先连接数据库,数据库连接在setting.py文件的DATABASES列表中设置。
操作表主要是对表的创建、删除和修改操作。
操作表在APP的models.py文件中操作,操作前需要导入models库。
from django.db import models
然后在创建一个自定义类(生成的表名=APP名+类名),在类中使用models库中的方式创建字符串。
执行生成表命令
表对应的类创建好后,需要执行相关命令才能生成相关表。
执行生成表命令,在Pycharm终端中使用makemigrations命令将检测到的模型创建新的迁移,然后使用migrate命令将数据库状态与当前模型集和迁移集同步。
修改和删除
删除表或删除某个字段,只需要将表或字段对应的类或属性给注释,然后执行makemigrations和migrate命令即可。
添加表或字段,在models.py文件中添加一个类或属性,然后执行makemigrations和migrate命令即可。
在表中新增列,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据。新增列设置数据有三种方式。
第一种:手动输入一个值
第二种:设置默认值 models.IntegerField(default=2)
第三种:允许为空 models.IntegerField(null=True, blank=True)
操作表中数据
添加数据;添加数据在views.py文件中操作,使用类.object.create(字段=值, 字段2=值, ...)进行添加。对应类属于models.py文件,所在使用添加操作前需要先引用该文件中的类,操作如下
注意:在插入数据时,是否给定值,根据字段设置来定,如果字段可以为空,则这个字段可以不赋值。
删除数据
删除数据使用delete()进行删除,调用delete()函数前,一定要加筛选条件。
删除指定数据。filter()为筛选条件,类似SQL中where
类.objects.filter(字段1=值, 字段2=值, ...).delete()
删除全部数据。
类.objects.all().delete()
修改数据
更新数据使用update()进行操作,调用update()函数前,需要加筛选条件。
更新指定数据。filter()为筛选条件,类似SQL中where
类.objects.filter(字段1=值, 字段2=值, ...).update(字段1=值, 字段2=值, ...)
更新全部数据。
类.objects.all().update(字段1=值, 字段2=值, ...)
查询数据
查询数据操作是生产环境中最觉的操作;使用all()和filter()实现数据查询,它返回一个数据集。
filter()函数
ORM框架中的filter()函数是用于过滤条件,常用参数如下。
用户管理系统 课堂练习创建用户管理系统,要求实现以下功能。 展示用户列表(list_user) 添加用户(add_user) 删除用户(delete_user)