【django学习-02】MTV模式与django流程

  • 一:MVC和MTV模式

    • 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。
    • Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:
      • Model(模型):负责业务对象与数据库的对象(ORM)
      • Template(模版):负责如何把页面展示给用户
      • View(视图):负责业务逻辑,并在适当的时候调用Model和Template
      • 此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
  • 二:django的流程和命令行工具

    • 1、创建一个django工程 : django-admin.py startproject mysite0828
      • manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
      • settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
      • urls.py ----- 负责把URL模式映射到应用程序。
    • 2、在mysite目录下创建blog应用: python manage.py startapp blog
      • migrations:用于生成数据迁移文件,可自动在数据库生成相应的数据表;
      • admin.py:用于设置当前App的后台管理功能;
      • models.py:定义数据库的映射表,每个类可以关联一张数据表,实现数据持久化;
      • views.py:视图文件,处理功能的业务逻辑。
    • 3、生成同步数据库的脚本:python manage.py makemigrations
      • 同步数据库: python manage.py migrate
      • 注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴方法是把migrations目录下的脚本(除__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。
    • 4、启动项目:python manage.py runserver 8080
  • 三:hello world之旅

#settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

#urls.py
from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'cur_time/',views.cur_time),
]

#views.py
def cur_time(request):
    import time
    return render(request,"cur_time.html",{"abc":time.time()})

#cur_time.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>当前时间:{{ abc }}</h1>

</body>
</html>
  • 四:数据提交并且展示在浏览器
#urls.py
path(r'userInfo/',views.userInfo),

#views.py
info_list = []
def userInfo(req):

    if req.method == "POST":
        username = req.POST.get("username", None)
        sex = req.POST.get("sex", None)
        email = req.POST.get("email", None)

        info = {"username": username, "sex": sex, "email": email}
        info_list.append(info)
        print(info_list)

    return render(req, "index.html", {"info_list": info_list})

#index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/userInfo/" method="post">
    <p>姓名<input type="text" name="username"></p>
    <p>性别<input type="text" name="sex"></p>
    <p>邮箱<input type="text" name="email"></p>
    <p><input type="submit" value="submit"></p>
</form>

<hr>
<h1>数据展示</h1>
<table border="1">

    <tr>
        <td>姓名</td>
        <td>性别</td>
        <td>邮箱</td>
    </tr>
    {% for i in info_list %}

        <tr>
            <td>{{ i.username }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.email }}</td>
        </tr>

    {% endfor %}

</table>
</body>
</html>
posted @ 2022-08-28 23:02  Tony_xiao  阅读(98)  评论(0编辑  收藏  举报