date: 2021-11-08title: Django入门 #标题
tags: #标签
categories: python # 分类
MVC和MTV框架
MVC
Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(Moudles),控制器(Conntroller)和视图(Views)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
MTV
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
- M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中,最后返回网页给用户。
Django安装与基础命令
安装Django
pip3 install django==1.11.9
基础指令
$ django-admin startproject mysite # 创建一个名为"mysite"的Django 项目
$ cd mysite
$ python manage.py startapp blog #通过执行manage.py文件来创建应用,执行这句话一定要注意,你应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
# 启动django应用
$ python manage.py runserver 127.0.0.1:8080 # 本机就不用写ip地址了 如果连端口都没写,默认是本机的8000端口
Django目录介绍
$ PS C:\Users\Tenyuns\mysite> tree /f
C:.
│ manage.py # 一种命令行工具,允许你以多种方式与该Django项目进行交互。python manage.py help,能列出它所能做的事情。此文件一般情况下不需要改动。
│
├─blog # blog应用目录
│ │ admin.py # admin后台管理文件
│ │ apps.py
│ │ models.py # 主要用一个 Python 类来描述数据表。 称为模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。
│ │ tests.py # 测试文件
│ │ views.py # 包含了页面的业务逻辑。 latest_books()函数叫做视图。
│ │ __init__.py # 让Python把该目录当成一个开发包(即一组模块)所需的文件。这是一个空文件,一般不需要做修改。
│ │
│ └─migrations
│ __init__.py # 让Python把该目录当成一个开发包(即一组模块)所需的文件。这是一个空文件,一般不需要做修改。
│
└─mysite
│ settings.py # 该Django项目的设置与配置。查看并理解这个文件中可用的设置类型及其默认值。
│ urls.py # Django项目的URL设置。可视其为你的django网站的目录。
│ wsgi.py # 服务器网关接口,是Python语言定义的web服务器和web服务程序或者框架之间的一种简单而通用的接口。简单来说就是与apache的交互接口。
│ __init__.py # 让Python把该目录当成一个开发包(即一组模块)所需的文件。这是一个空文件,一般不需要做修改。
# 注:后面的页面设计文件,在应用目录下创建目录templates,名为XX.html的文件放在此处。
主要操作文件,着重理解:
- settings.py
- urls.py
- views.py
- models.py
- blog/templates/XX.html
基于Django实现一个简单的示例
修改url控制器文件
from django.conf.urls import url
from django.contrib import admin
from apps import views # 将views导入进来
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index), # 正则匹配以index开头的请求,执行views.index函数
]
修改views文件
from django.shortcuts import render, HttpResponse
import datetime
# Create your views here.
# 定义urls文件中匹配请求后执行的函数
def index(request): # 形参request来接收HTTPRequest对象(源码中封装好的)
now=datetime.datetime.now()
ctime=now.strftime("%Y-%m-%d %X")
# 负责返回页面
if request.method == 'GET':
'''
render,渲染html页面文件并返回给浏览器,login.html文件存放于 ../templates/login.html,
但这里直接写文件名就行了,是因为Django默认将../Templates目录加入到了当前系统搜索路径
'''
return render(request, 'login.html',{"ctime":ctime})
else: # 如果不是GET请求,就走下面的逻辑
'''
这里以字典的形式返回页面提交的信息,
如:<QueryDict: {'username': ['lvjianzhao'], 'password': ['123.com']}>
'''
print(request.POST) # 可以为GET或POST
# 获取提交的信息中的值
username = request.POST.get('username')
password = request.POST.get('password')
# 这里将后台的用户名和密码写死了,在实际中,这两个值,是要和后端数据库去匹配的
if username == 'lvjianzhao' and password == '123.com': # 根据提交的用户名或者密码,返回登录成功或失败
return HttpResponse('<h1>登录成功<h1/>')
else:
return HttpResponse('<h1>登录失败<h1/>')
login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎来到登录页面</h1>
<form action="/index/" method="post">
<label>
用户名:<input type="text" name="username">
</label>
<br/>
<label>
密 码:<input type="password" name="password">
</label>
<br/>
<input type="submit">
</form>
<h4>当前时间:{{ ctime }}</h4>
</body>
</html>
最后访问http://127.0.0.1:8000/index/
如下:
如果测试登录功能,提交后报错如下:
现在只需要做一步,在settings配置文件里面将这一行注释掉,这是django给你加的一个csrf的认证,现在不需要:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', # 注释这一行配置即可
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
自定义django项目启动地址及端口
如果想要自定义项目启动的监听地址,请按照如下方法进行设置:
在下面定义要监听的地址及端口即可: