django网站建设 ---- 2. 如何利用django搭建网站之django的MTV模式及实例django的简单建立

本文介绍了Django的MTV模式,包括模型(Model)、模板(Template)和视图(View)的概念及其作用。通过实例展示了如何配置URL、创建视图函数、设计模板以及模型的使用,帮助读者理解Django框架的运作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

github网址: https://github.com/Nereus-Minos/EChatNow

展示网址: http://zhaohang.pythonanywhere.com/

一. Django的MTV模式简介

  • M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
  • T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
  • V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
    在这里插入图片描述

二. Django的MTV使用流程

1首先,配置URL
在 " 项目名称/urls.py" 文件中修改:

urlpatterns = [
    path('', include('mvc.urls')),
]

意思是:当服务器接收到任何的网址请求都要转接到应用mvc目录下的urls.py中.

建立"mvc/urls.py"文件并添加代码:

from django.conf.urls import url
from mvc import views


urlpatterns = [
    url(r'^$', views.index),        # 主页
    ]

意思是:当服务器接收到请求的网址后缀为空,则执行同目录下的views.py文件中的index函数.

建立"mvc/views.py"文件并添加代码: -----(V)

from django.http import HttpResponse
def index(request):
	_template = loader.get_template('index.html')
	_context = {}
    _output = _template.render(_context)
    return HttpResponse(_output)

意思是:返回一个叫’index.html’的HTML模板,这个模板存在于"templates/index.html"

建立"templates/index.html"并添加代码: -----(T)

<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
	hello!
</body>
<.html>

三. 此时再运行:

python manage.py runserver

可以见到我们写的hello!

四. 模型的使用

它主要负责与数据的交互,在使用django框架设计应用系统时,需要注意的是django默认采用的是orm框架中的codefirst模型,也就是说开发人员只需要专注于代码的编写,而不需要过多的关注数据库层面的东西,把开发人员从数据库中解放出来

django会根据Model类生成一个数据库镜像文件,然后再使用该镜像文件生成数据库,同时该文件将记录与数据库同步版本的变化,所以在使用django进行开发时不要手工去修改数据库,这样会造成django框架的版本记录不正确,从而无法正确的同步数据模型与数据库的内容
1:数据库连接配置:settings.py

DATABASES = {
     'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'test',

        'USER': 'root',

        'PASSWORD': '434944800',

        'HOST': 'localhost',

        'PORT': '3306',

    }
}

2. 编写Model

from __future__ import unicode_literals
from django.db import models

# Create your models here.

class userInfo(models.Model):
    username=models.CharField(max_length=100)
    passwd=models.CharField(max_length=20)
    sex=models.BooleanField()

类userinfo即相当于数据表名,django实际生成的表名为web_userinfo,由于对数据库的操作需要借助于django,所以model类需要继承自models.Model

3. 与数据库进行同步
准备工作完成后在终端进行工程所在目录中输入命令:

python manage.py  makemigrations

生成镜像文件

python manage.py  migrate

同步到数据库
执行以上两条命令将对Model和数据库进行同步

4. 使用
在"mvc/views.py"中导入模型:

from mvc.models import userInfo

使用django模板的相关语法进行数据的提取:

_user = userInfo.objects.get(username= ''aaa')

上面的意思是:获得姓名为aaa用户对象

5.使用的相关知识

    Person.objects.create(name=name,age=age) # 新建一个对象

    p = Person(name="WZ", age=23)

    p.save()  # 将信息保存到数据库

    p = Person(name="TWZ")  # 新建一个对象

    p.age = 23

    p.save()   # 将信息保存到数据库

    Person.objects.get_or_create(name="WZT", age=23)

 

这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.



获取对象有以下方法:

    Person.objects.all()

    Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存

    Person.objects.get(name=name)


    get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter

    Person.objects.filter(name="abc")  # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人

    Person.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件


    Person.objects.filter(name__contains="abc")  # 名称中包含 "abc"的人

    Person.objects.filter(name__icontains="abc")  #名称中包含 "abc",且abc不区分大小写


    Person.objects.filter(name__regex="^abc")  # 正则表达式查询

    Person.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写


    filter是找出满足条件的,当然也有排除符合某条件的

    Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person对象

    Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名称含有abc, 但是排除年龄是23岁的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值