MVC和MTV框架
1.MVC
定义
将web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
2.MTV
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
- M (模型Model): 负责业务对象和数据库的关系映射(ORM)。
- T (模板 Template):负责如何把页面展示给用户(html)。
- V (视图View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
Django的下载和安装
1.下载
pip install Django 1.11
2.创建一个Django项目
方式一:通过命令行创建一个项目
#切换到指定文件夹下
cd Django_pro
#命令创建名称为firstitem的Django项目
django-admin startproject firstitem
创建好的项目目录如下:
此时项目已经可以运行,切换到该项目firstitem目录下,输入命令行:
# 指定项目运行在8001端口
python manage.py runserver 127.0.0.1:8001
如图:
此时即可通过浏览器访问127.0.0.1:8001;
同时在该项目的目录下多了名为db.sqlite3的文件夹,这是Django内置的小型数据库;
项目是由多个用于组成的,不同的应用有不同的逻辑,有不同的数据库,因而逻辑是写在各个应用中的;创建应用命令如下:
#切换到项目根目录下
cd firstitem
#执行以下命令行,创建应用app01
python manage.py startapp app01
通过命令行创建的项目应用,需要在项目下的settings文件中进行app01的相关注册配置
方式二:通过pycharm工具创建Django项目
此时settings文件中不需要配置app01,会在创建项目时自动将创建的应用注册,此时settings文件如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config', #路径
]
#其中'app01.apps.App01Config', 为从app01目录下--->apps.py---->App01Config的类---->类中有name = 'app01'
一个简单的Django登录项目实例
根目录下url.py文件文件中负责路径分发的操作,代码如下:
from django.contrib import admin
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
path(r'^login/',views.login),
]
视图函数文件views.py中相关操作:
from django.shortcuts import render
# Create your views here.
def login(request):
print(request.path) #当前请求路径
print(request.path_info) #当前请求路径
print(request.method) #请求方法
if request.method=='GET':
#render中第一个参数是必须给的,里面封装了请求的相关参数;同时需要在settings文件中配置路径,来找到'login.html'文件
return render(request,'login.html') #同时在template文件夹下要创建了login.html 文件
else:
print(request.POST) #其中封装了post请求提交的数据为<QueryDict: {'username': ['aa'], 'password': ['aa']}>
uname=request.POST.get('username') #优于用字典的键取值
password=request.POST.get('password')
if uname=='ww' and password=='123':
return HttpResponse('成功')
else:
return HttpResponse('对不起,验证失败')
之所以可以找到template下的html文件,是在settings文件中的配置:
'DIRS': [os.path.join(BASE_DIR, 'templates')] #可以找到template下的login.html文件
项目根目录下创建template/login.html文件,内容如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title>
</head>
<body>
<form action="127.0.0.1:8000/login/" method="post"> <!--提交地址应该加上/login/否则-->
<!--action的属性为空时,默认往当前页面的路径下提交;-->
<!--action的属性为相对路径时,会在前面拼上当前页面的域名和端口号 action='/login/'时,提交的路径为http://127.0.0.1:8000/login/-->
<!--a标签路径,img标签的路径,script标签的路径,link标签的路径均有此规则,均可写相对路径-->
登录名<input type="text" name="username">
密码<input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
运行该项目:
python manage.py runserver
#默认端口为8000