共计 3714 个字符,预计需要花费 10 分钟才能阅读完成。
一. 框架
框架是应答某类软件设计问题而产生的,它是由各个软件模块组成的,每个模块都有特定的性能,模块与模块之间通过相互配合来实现软件的开发。
二. MVC 框架
MVC 简介
- MVC 的理念:分工,让专门的人去做专门的事。
- MVC 的核心思想:解耦。
Web MVC 框架模块性能
- M:Model, 和数据库进行交互。
- V:View, 产生 html 页面。
- C:Controller, 用于接管、解决申请,与 M 和 V 进行交互,返回应答。
如下图所示
三.Django 框架
3.1Django 简介
Django,遵循 MVC 思维,然而有本人的一个名词,叫做 MVT。
3.2Django 中的 MVT
- M:Model, 模型,和 MVC 中 M 性能雷同,同样是和数据库进行交互。
- V:View, 视图,相当于 MVC 中 C,接管、解决申请,与 M 和 T 进行交互,返回应答。
- T:Template, 模板,和 MVC 中 V 性能雷同。
如下图所示 假设 baidu 为 Django 开发
3.3Django 装置
pip install django
// 指定版本 装置
pip install django==2.2.2
3.4 第一个 Django 我的项目
- 建设我的项目
django-admin startproject mysite
- 我的项目目录
.
├── manage.py // django 我的项目的管理文件
└── mysite
├── __init__.py //__init__.py: 阐明是一个 python 包。├── settings.py // 配置文件
├── urls.py //url 路由配置
└── wsgi.py // web 服务器和 Django 交互的接口
- 创立 Django 利用(app)
cd mysite // 进入 django 我的项目中
python manage.py startapp testapp // testapp 为 App 的名字
// 也能够应用
django-admin startapp testapp
3.5 配置文件 settings
- 注册利用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'testapp', 晚期版本应用
'testapp.apps.TestappConfig', # 2.0 以上版本应用
]
- 配置时区和语言环境
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
- 配置 templates 目录
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',
],
},
},
]
- 配置 static
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),
)
- 数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
3.6 视图
在 Django 中,通过浏览器去申请一个页面时,应用视图函数来解决这个申请的,视图函数解决之后,要给浏览器返回页面内容。
视图函数
- 定义视图函数
视图函数在 views.py 中定义。
"""
视图函数必须有一个参数 request,进行解决之后,须要返回一个 HttpResponse 的类对象。hello world 就是返回给浏览器显示的内容。"""
def index(request): // request 参数必须
return HttpResponse('hello world')
3.7 url 路由
url 配置的目标是让建设 url 和视图函数的对应关系。url 配置项定义在 urlpatterns 的列表中,每一个配置项都调用 url 函数。
url 函数有两个参数,第一个参数是一个正则表达式,第二个是对应的解决动作。
1.X 版本配置 url 时,有两种语法格局:
a) url(正则表达式,视图函数名)
b) url(正则表达式,include( 利用中的 urls 文件))
from django.conf.urls import url
from django.contrib import admin
from testapp import views
urlpatterns = [url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
2.x 版本应用 path 更不便
from django.contrib import admin
from django.urls import path
from testapp import views
urlpatterns = [path('admin/', admin.site.urls),
path('index', views.index, name="index"),
]
正式开发中,在配置 url 时,首先在我的项目的 urls.py 文件中增加配置项时,并不写具体的 url 和视图函数之间的对应关系,而是蕴含具体利用的 urls.py 文件,在利用的 urls.py 文件中写 url 和视图函数的对应关系。
以 2.2.2 版本演示 我的项目 urls
from django.contrib import admin
from django.urls import path, include
urlpatterns = [path('admin/', admin.site.urls),
path('', include('testapp.urls') ),
]
app 中 urls
from django.urls import path
from testapp import views
urlpatterns = [path("index", iviews.index, name='index'),
]
url 和 view 配置过程
- 1) 在我的项目的 urls 文件中蕴含具体利用的 urls 文件,在具体利用的 urls 文件中蕴含具体 url 和视图的对应关系。
- 2)url 配置项是定义在一个名叫 urlpatterns 的列表中,其中的每一个元素就是一个配置项,每一个配置项都调用 url 函数。
3.8 Model
django 中内嵌了 ORM 框架,ORM 框架能够将类和数据表进行对应起来,只须要通过类和对象就能够对数据表进行操作。
在 Django 中次要是设计类:模型类。
ORM 另外一个作用:依据设计的类生成数据库中的表。
在利用 models.py 中设计模型类。
示例
class UserInfo(models.Model):
username = models.CharField(max_length=24)
age = models.IntegerField()
gender = models.BooleanField()
email = models.EmailField()
生成迁徙文件
python manage.py makemigrations
执行迁徙文件生成数据表
python mange.py migrate
// 生成表名的默认格局:利用名_模型类名小写
根底操作
- 减少一条数据
第一种形式
user1 = model.UserInfo() # 创立一个对象
user1.username = '张三'
user1.age = 18
user1.gender = False
user1.email = 'zhangsan@test.com'
user.save() // 执行 save 后,会保留数据到数据表中
第二种形式
user1 = models.UserInfo.objects.create(username='张三', age=18, gender=False,
email='zhangsan@test.com')
- 查问 id 为 1 的用户信息
user1 = models.UserInfo.get(id=1)
- 批改 id 为 1 的用户的 email
user1 = models.UserInfo.get(id=1)
user1.email = 'zhangsan@abc.com'
user1.save()
- 删除 id 为 1 的用户
user1 = models.UserInfo.get(id=1)
user1.delete()
- 查问所有用户信息
models.UserInfo.objects.all()