一、Django基础

1、MVC简介

  最初是由施乐公司旗下的帕罗奥多研究中心的一位研究人员给 smalltalk语言发明的一中软件设计模式。

  MVC的理念:分工。

  MVC的核心思想:解耦。

  1.1 Web MVC模型

    

 

 

    M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查等操作。

    V全拼为View,用于封装结果,生成页面展示的html内容。

    C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

2、Django简介

  Django的主要目的是简便、快速的开发数据库驱动的网站,它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。

  Django官网:https://www.djangoproject.com/

  Django源码:https://github.com/django/django

  Django官方文档:https://docs.djangoproject.com/zh-hans/3.0/

  Django框架遵循MVC设计,但有一个专有名词:MVT

  2.1 Django的MVT模型

  

 

 

    M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。

    V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。

    T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

    MVC和MVT之间的差异就在于黑线黑箭头标识出来的Template部分。

3、环境搭建

  3.1 配置虚拟环境

    (1)安装虚拟环境:sudo apt install virtualenv  

    (2)安装虚拟环境扩展包:sudo apt install virtualenvwrapper,安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境。

    (3)修改用户家目录下的配置文件.bashrc,添加:

      export WORKON_HOME=$HOME/.virtualenvs

      source /usr/local/bin/virtualenvwrapper.sh

    (4)使用source .bashrc命令使配置文件失效

  3.2 创建虚拟环境

    (1)mkvirtualenv -p python3 虚拟环境名称

      

 

 

     (2)说明

      1)创建成功后,会自动工作在这个虚拟环境上

      2)工作在虚拟环境上,提示符最前面会出现"虚拟环境名称"

      3)所以的虚拟环境,都位于/home/username/下的隐藏目录.virtualenvs下。

        

 

 

 

  3.3 退出虚拟环境

    deactivate  #退出虚拟环境

  3.4 查看与使用

    查看所有虚拟环境的命令:workon 两次tab键

    使用虚拟环境的命令:workon 虚拟环境名称

  3.5 删除虚拟环境

    (1)确保退出虚拟环境:deactivate

    (2)删除:rmvitualenv 虚拟环境名

  3.5 包操作

    (1)通过pip命令安装包:pip install 包名称 

      sudo pip install 包名称这个命令会将包安装到真实主机上。

    (2)查看已安装的python包命令:

      pip list

      pip freeze

4、创建项目

  Django中,项目的组织结构为一个项目包含多个应用,一个应用对应一个业务模块。

  4.1 创建Django运行的虚拟环境

    创建:mkvirtualenv py3_Django_env

    安装Django:pip install django==1.8.2

    运行:workon py3_Django_env

  4.2 在用户目录下建立文件夹存放文件

    cd ~/Desktop/demo/Django

 

 

 

  4.3 创建项目

    django-admin startproject 项目名称

    

 

 

    (1)manage.py是项目管理文件,通过它管理项目

    (2)在项目文件夹中,py3_django_test为与项目同名文件,放置配置信息

    (3)__init__.py是一个空文件,表示这个目录可以被当成包使用

    (4)settings.py是项目的整体配置文件

    (5)urls.py是项目的url配置文件

    (6)wsgi.py是项目与WSGI兼容的Web服务器入口

  4.4 创建应用

    使用一个应用开发一个业务模块

    # 创建应用名称为booktest,完成图书-英雄的信息维护

    python manage.py startapp booktest

    

 

 

    (1)__init__.py是一个空文件,表示当前目录booktest可以当作一个python包使用。

    (2)tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员来使用。

    (3)models.py文件跟数据库操作相关

    (4)views.py文件跟接收浏览器请求,进行处理,返回页面相关

    (5)admin.py文件跟网站的后台管理相关

    (6)migrations文件夹存放模型操纵数据库后的迁移文件

  4.5 安装应用  

    应用创建成功后,需要安装才可以使用,也就是建立应用和项目之间的关联。

    在settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。

    

 

 

   4.6 开发服务器

    在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。

    运行服务器命令:python manage.py runserver ip:port

    说明:(1)可以不写ip和端口,默认ip是127.0.0.1,默认端口为8000。

       (2)通过浏览器访问

    

 

 

        (3)如果增加、修改、删除文件,服务器会自动重启,按ctrl+c停止服务器。

5、模型设计(models.py)

  django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

  使用django进行数据库开发的步骤如下:

  (1)在models.py中定义模型类

  (2)迁移

  (3)通过类和对象完成数据增删改查操作

  5.1 ORM框架

    O是object,即类对象;R是relation,关系数据库中数据表;M是mapping,映射。

    在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据

    ORM框架可以根据我们设计的类自动帮我们生成数据库中的表格,略去自己建表的过程。

  5.2 定义模型类

    模型类定义在models.py文件中,继承自models.Model类。

    说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。

    5.2.1 设计图书类

      (1)类名:BookInfo

      (2)图书名称:btitle

      (3)图书发布日期:bpub_date

    5.2.2 模型类的设计

    

 

 

     5.2.3 迁移

      迁移由两步完成:

      (1)生成迁移文件:根据模型类生成创建表的迁移文件

      (2)执行迁移:根据生成的迁移文件在数据库中创建表

      生成迁移文件命令:python manage.py makemigrations

      

 

 

       执行生成迁移文件命令后,会在应用booktest目录下的migrations目录中生成迁移文件。

      

 

 

       Django框架根据设计的模型类生成了迁移文件,在迁移文件中可以看到fields列表中每一个元素跟BookInfo类属性名以及属性的类型是一致的。其中id项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长。

      执行迁移命令:python manage.py migrate

      

 

 

       当执行迁移命令后,Django框架会读取迁移文件自动帮我们在数据库中生成对应的表格。

      

 

 

       Django默认采用sqlite3数据库,上图中的db.sqlit3就是Django框架帮我们自动生成的数据库文件。

      安装sqlitebrowser查看db.sqlite3文件:sudo apt-get install sqliteborwser

      在终端中启动:spliteborwser

      spliteborwser界面如下:

      

 

 

       打开db.sqlite3文件

      

      

      上面生成的表的名字叫做booktest_bookinfo,其中booktest是应用的名字,bookinfo是模型类的名字。

      数据表的默认名称为:<app_name>_<model_name>

  5.3 设计英雄类

    5.3.1 英雄类

      (1)类名:HeroInfo

      (2)英雄姓名:hname

      (3)英雄性别:hgender

      (4)英雄简介:hcomment

      (5)英雄所属图书:hbook

      (6)图书-英雄的关系为一对多

      

 

 

       生成迁移文件并执行:

      

 

 

      BookInfo和HeroInfo类之间具有一对多的关系,一对多的关系应该定义在多的哪个类HeroInfo类中。

      hbook=models.ForeignKey('BookInfo')这句代码让BookInfo类和HeroInfo类之间建立了一对多的关系。

      其中booktest_heroInfo表中的hbook_id字段是根据HeroInfo类的关系属性hbook生成的,对应着图书表中的主键id。

  5.4 数据操作

    完成数据表的迁移之后,可以通过进入项目的shell,进行简单的API操作。

    进入项目shell的命令:python manage.py shell

    退出:ctrl+d或输入quit()

    

 

 

     对象的关联操作

    

 

 

    

 

 

 6、后台管理

  Django能够根据定义的模型类自动地生成管理页面

  使用Django的管理模块,需要按照如下步骤操作:

  (1)管理界面本地化

  (2)创建管理员

  (3)注册模型类

  (4)自定义管理页面

  6.1 管理界面本地化

    本地化是将显示的语言、时间等使用本地的。即中国大陆地区使用简体中文,时区使用亚洲/上海。

    打开settings.py文件,找到语言编码、时区的设置项,更改内容:

    

   6.2 创建管理员

    创建管理员的命令:python manage.py createsuperuser

    按提示输入用户名、邮箱、密码

    接下来启动服务器:python manage.py runserver

    

 

 

     打开浏览器,在地址栏中输入如下地址后回车

    

 

 

     输入前面创建的用户名、密码完成登录

  6.3 注册模型类

    登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。

    

    

  6.4 自定义管理页面

    Django提供了自定义管理页面的功能,比如列表页要显示哪些值。

    在admin.py中,自定义类,继承自admin.ModelAdmin类:

    

 

 

     

 

 

 7、视图

  对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。

  使用视图时需要进行两步操作:

  (1)定义视图函数

  (2)配置URLconf

  7.1 定义视图

    视图是一个python函数,被定义在views.py中。

    视图必须有一个参数request,必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器的页面上。

    

 

 

 

  7.2 配置URLconf

    请求者在浏览器地址栏中输入url,请求到网站后,获取url信息,然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。

    一条URLconf包括url规则、视图两部分

    (1)url规则使用正则表达式定义。

    (2)视图就是在views.py中定义的视图函数。

    需要两步完成URLconf配置:

    (1)在应用中定义URLconf

    (2)包含到项目的URLconf中

    7.2.1 在应用下创建urls.py文件,并将视图链接到url请求:

      

 

 

 

    7.2.2 将应用中的urls.py包含到总设置中的urls.py中,让其匹配后可以跳转:

      

 

 

  7.3 请求访问

    视图和URLconf都定义好了,接下来在浏览器中输入对应的url请求:

    http://127.0.0.1:8000/index/

    

 

 

8、 模板

  在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用。

  8.1 创建模板

    在项目中建立和应用booktest同级的目录templates,并创建下级目录booktest存放app中使用的静态文件

    

 

 

 

  8.2 设置查找模板的路径

    在settings.py文件中,设置TEMPLATES的DIRS值

    

 

 

  8.3 定义模板

    

 

 

     在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的:{ { 变量名 } }

    在模板中编写代码段语法如下:{ % 代码段 % }

  8.4 视图调用模板

    调用模板分为三个步骤:

    (1)找到模板

    (2)定义上下文

    (3)渲染模板

    

 

 

     浏览器效果:

    

 

 

   8.5 视图调用模板简写

    视图调用模板都要执行以上三部分,于是Django提供了一个函数render封装了以上代码。

    方法render包含3个参数:

    (1)第一个参数为request对象

    (2)第二个参数为模板文件路径

    (3)第三个参数为字典,表示向模板中传递的上下文数据

    

     

 

 

   

9、实践项目

  9.1 定义视图

   

 

 

   9.2 配置url

    

 

 

   9.3 定义模板

    

    

 

 

 

 

 

    

 

posted @ 2020-04-21 16:28  Norni  阅读(232)  评论(0编辑  收藏  举报