django是一个基于python的web框架。
相比于另一个基于python的web框架 Flask,django更加全面,功能更加强大。
Django似乎更多用来开发常规网站,而Flask经常用来开发API。
内容大纲
1 django的MTV架构
要说django的MTV,就不得不说网站框架的MVC结构,因为django本身也是基于MVC架构(自称为MTV),具体如下图:
M –> Model 俗称模型,其实就是控制数据库表结构的东西
V –> View 俗称视图,其实就是负责具体前端输出的东西,例如 颜色、文字、表单等
C –> Controller 控制器,其实就是具体负责实现的功能,例如 加减乘除、增删改查等
为了方便记忆,可以简单理解为: M是数据库表,V是前端页面,C是后端代码
2 django的工作流程
作为一个web框架,django也主要围绕 请求 和 响应 来工作,下图是大致的工作流程。
2.1 route
一般位于工程目录下的工程同名目录中,例如
project_1/project_1/urls.py
主要用于定义路由,也就是定义 某路径的请求该去往哪里,例如:
from app_1 import views
urlpatterns = [
path('index/', views.index),
]
上面代码的作用是:凡是uri匹配到 /index,都将该请求交给app_1中 view.py定义的index函数来处理,
至于view,就需要下面来定义了
2.2 view
一般位于工程目录下的应用目录中,例如
project_1/app_1/views.py
主要用于接收urls路由过来的请求,并对该请求进行处理,
views是整个框架的大脑,很多后端逻辑都要放在这里进行处理
def index(request):
return render(request, 'index.html')
上述代码的作用是: 将urls路由过来的请求(/index)直接交由rander函数进行渲染
2.3 model
一般位于工程目录下的应用目录中,例如
project_1/app_1/models.py
主要用于定义数据库相关的东西,支持ORM(将编程语言翻译成sql语句)
其实就是做一层封装。让我们简单方便地实现数据库的增删改查操作,不用再去花时间思考如何编写、拼接sql语句
例如:
from django.db import models
# Create your models here.
class cal(models.Model):
value_a = models.CharField(max_length=50)
value_b = models.FloatField(max_length=50)
sum_ab = models.CharField(max_length=50)
上述代码的作用是:
创建一个新的数据表,表名为cal,并定义3个字段
(实际中cal会默认添加一个前缀,前缀是当前的app应用名)
2.4 template
默认不会生成,需要手动创建此目录。
一般位于工程目录下的应用目录中,例如
主要用于存放前端页面,方便使用。
此外views经常会传递一些变量给html页面,此时需要用到rander函数,例如
def Cal_list(requst):
data = cal.objects.all()
return render(requst, 'cal_list.html', context={'data': data})
上述代码的作用是:views 查询model 中定义的数据表cal的全部数据,将结果存入 ‘data’
随后用rander函数将 ‘data’ 和请求发给cal_list.html进行渲染
最后的结果作为http响应发往用户游览器展示
rander是常用的函数,其详细用法可以参考官方文档
https://docs.djangoproject.com/zh-hans/3.0/topics/http/shortcuts/#django.shortcuts.render
django大致的工作流程就是这样,具体的实例可以参考我的其它博文