- 一个完整的软件结构,包含了和用户交互的软件界面、进行数据处理的后端程序、实现数据存储的数据库三个部分;
图1通过前端交互界面展示数据或者获取用户输入的数据,将数据传递给后端处理程序[传递请求参数];后端处理程序处理完数据,将数据永久保存[持久化]到数据库中。
通过后端处理程序可以从数据库中读取数据,经过处理之后传递给前端网页进行展示
2. Django创建的web项目,文件结构 & 项目结构
文件结构:每个文件的意义[文件的作用和所处的位置]
|-- mysite/ # 项目根目录
|-- mysite/ # 根项目 只能出现1个,在创建项目时同时创建
|-- settings.py # 项目信息配置,如项目的语言
|-- urls.py # 项目主路由配置
|-- myblog/ # 子应用模块,可以出现0~n个
|-- app.py # 子应用模块的信息描述
|-- models.py # 子应用模块中的模型
|-- urls.py # 子应用模块中的自路由,需要包含到主路由中
|-- views.py # 子应用视图处理模块,通过路由来调用函数
|-- models_manager.py # 管理器模块[可选]
|-- manage.py # 命令模块
项目结构:项目组织形式[架构方式]~通过根项目模块,管理所有的子项目模块
|-- 根项目
|-- 子模块项目[单独的项目]<INSTALLED_APPS | urls -> 接入跟项目>
|-- 子模块项目[单独的项目]
|-- ..
功能的扩展性和可伸缩性及可维护性非常的强大!
扩展性:Django可以在尽量少的修改源代码的基础上,增加强大的新功能[OCP]
可伸缩性:Django的项目功能,可以在互相不影响的情况下,动态的增加或者减少不同的项目功能
可维护性:不同的项目功能分布在不同的子模块应用中,如果某个功能出现巨大的问题,只需要停用这个模块项目即可,不影响其他的模块项目的正常功能
3. Django的设计结构——MVT处理模式
MVT处理模式一种编程思想,由数据模型Model,视图模块view和模板系统Template组成;并且添加了路由url的功能实现请求分发操作,完成实际流程的处理
一个完成的流程就是客户端请求发送之后,通过路由Urls分配请求到具体的视图处理函数views中进行操作,调用普通处理函数处理具体的数据模型models,将数据增加/修改/删除/查询到数据库的操作,最后普通处理函数返回处理结果给视图处理函数views,view中将数据填充到模板template中返回给客户端浏览器进行展示。
听说过MVC处理模式吗?听说过MVP处理模式吗?听说过MVT处理模式吗?
MVC是最基本的一种编程思想,主要解决的是一个问题的处理流程,通过三个组成部分[封装数据的模型model,进行数据展示和采集的视图view,以及进行请求分发的控制器controller]完成问题处理流程的一种操作模式;在这种操作模式中,控制器完成视图和模型之间数据自动交互的桥梁,视图发起的请求会由控制器进行转发调用后端程序的处理函数进行数据model的处理,处理完成之后返回结果给控制器,控制器根据处理的结果返回不同的视图页面进行展示;在现行的MVC处理模式中,发展过程中将视图和模型的数据进行了双向绑定,视图中的数据发生变化,模型中的数据会自动变化,同样的模型中的数据一旦发生改变,视图中的数据同时变化。
MVP处理模式,是在MVC处理模式上,为了区分数据的绑定方式而杜撰的一个处理模式
MVP处理模式~前后端数据的交互,必须通过主动交互才能发生改变。
MVT处理模式,参考上图
4. Django项目搭建过程
a. 创建项目[Django项目在创建时,会自动创建根项目,是包含在根目录中的]
>>> django-admin startproject <name>
>>> eg. django-admin startproject mysite
b. 创建子应用模块
mysite>>> django-admin startapp <model_name>
mysite>>>eg. django-admin startapp myblog
c. 注册子应用模块给根项目
(1) 修改mysite/mysite/settings.py配置文件
..
INSTALLED_APPS = [
..
‘myblog’,
]
(2) 修改主路由文件mysite/mysite/urls.py
from django.conf.urls import url, include
urlpatterns = [
url(r”myblog/”, include(“myblog.urls”)),
..
]
d. 根项目的网页视图以及静态文件处理[所有子应用模块公共的]
(1) 配置根网页视图文件夹,修改mysite/mysite/settings.py
..
TEMPLATES = {
..
DIRS: [“temp”] # mysite/temp/
..
}
(2) 配置根项目静态文件路径,修改mysite/mysite/settings.py
添加新的配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, “static”) # mysite/static/
]
e. 配置子应用模块的网页模板以及静态文件
子应用模板的网页模板和静态文件不需要配置,而是Django内置的加载器对象,自动在子应用模块中进行查询[网页和静态文件]
子应用模块网页文件:在子应用模块中templates/文件夹下
子应用模块的静态文件:在子应用模块中static/文件夹下
实际操作过程中,为了和根项目网页和静态文件做区分,所以要进行路径隔离
eg:
mysite/myblog/templates/myblog/index.html
mysite/myblog/static/myblog/css/index.css
5. Django中的数据模型定义
数据模型:自定义的类型,可以创建对象,用于封装我们正在使用的数据,可以方便的和数据库进行交互
a. 连接数据库:mysite/mysite/settgins.py
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
‘detault’:{
‘ENGINE’: ‘django.db.backends.mysql’
‘NAME’: ‘db_name’
‘USER’: ‘root’
‘PASSWORD’: ‘’
}
}
b. 定义数据模型
from django.db import models
class MyObject(models.Model): # 自定义类型必须继承Model类型
id = models.AutoField(..) # 类型的属性,必须通过Django方法创建
c. 数据交互[数据和数据库之间的增删改查]
(1) 通过类型本身进行操作
models.MyObject.objects.all()/filter()/..
m = MyObject()创建一个对象
m.save()/delete()/update()
(2) 通过管理器对象进行操作
自定义管理器对象,继承Django内置的Manager类型
class MyObjectManager(models.Manager):
def create_obj(self, **kw):
pass
def delete_obj(self, **kw):
pass
def update_obj(self, **kw):
pass
..
6. 网页前端和后端程序之间的交互
(1) 网页前端发送数据给后端程序
前端网页的数据:用户输入(表单)、超链接、URL地址直接访问
前端->后端程序:数据的传递:请求参数
前端 传递数据 后端程序
HTTP1.1标注:8种传递方式
常见4种传递方式[GET/POST/PUT/DELETE]
项目中常用的2中传递方式[GET/POST]
扩展:项目中,还有一种特殊的GET传递方式:RESTful
get传递
post传递
restful传递
RESTful传递的参数,包含在url路径中
url路径是通过路由进行配置
参数需要通过路由进行设置
url(r’^param/(?P<name>[a-z]+)/rest/$’, views.rest_test)
()表示这里需要一个参数
?要使用指定的语法
P:param,表示参数描述
<name>:表示接受的参数数据,会放在一个名称为name的变量中
[a-z]+:表示这个参数只接受小写的1个或者多个字符
def rest_test(request, name):
pass
(2) 后端程序传递数据到网页进行展示
模板语法:Templates
变量|程序结构|过滤器|注释
{{name}} | {% 标签 %}
变量[普通|对象|列表|字典|..] {{变量名称}}
标签{% %}
程序结构 {%if%}..{%for%}..{%csrf_token%}..{%commend%}
{%block%}..{%load%}..{%url%}..{%static%}
过滤器{{变量 | 过滤器}}
注释:{%comment%}{%endcomment%}
常规的网页注释,不会影响变量数据的输出
网友评论