什么是框架
框架就是已经开发好部分功能代码,并封装起来之后提供给开发人员进行快速项目搭建和开发的一种项目。
为什么使用框架
由于不同的项目开发流程大同小异,所以当开发人员,进行了大量的重复工作之后,开始着手于代码自动生成和项目搭建功能的处理,将代码自动生成并就特定的项目功能直接开发出来,封装成一个特定的模块并发布,方便其他开发人员快速高效率的开发项目打下基础,所以各种框架根据不同的项目需要非常流行;一句话:提高效率降低成本。
模块和框架的区别
模块:一堆函数的集合
框架:一堆模块的集合,提供了基本的特定的复杂功能和处理流程的实现
Django的优势
在python中,目前主流的web框架很多,如下面这些:
web.py:轻量级的开源web框架,简单而且功能强大
Flask:python编写的轻量级web开发框架
Django:python编写的一个开源的web应用框架
Tornado:一个web服务器也是一个web框架
当然除此之外,还有一些非主流的web框架...,那么这么多的web框架,我们为什么一定要学习Django呢?
Django是一个功能十分强大的web开发框架,它为我们提供了丰富的各种我们开发时需要用到的功能,如:
强大的MVT项目开发架构
完善的模板视图的支持
准确的路由地址映射
高效的ORM数据操作
完善的后台管理系统
优秀的表单处理功能
Django的历史由来
Django 刚开始是劳伦斯出版集团下属一家处理新闻信息的子公司进行开发搭建的,专 门用于进行新闻网站的开发而使用的一个 CMS(内容管理系统),由于功能十分受开发者喜 欢,所以于 2005 年 7 月开源并得到 IT 界非常友好而热情的接纳,在广大 IT 技术人员经 过大量的完善和扩展之后,于 2008 年 9 月发布了第一个正式版本。
Django 框架的核心组件有:
用于创建模型的对象关系映射
为最终用户设计的完美管理界面
一流的URL设计
设计者友好的模块语言
缓存系统
Django的架构模式
MVC 软件架构: 软件是用来进行数据处理的,数据我们用 Model 来表示,根据软件的三层结构模型, 视图部分通过 View 进行表示,在视图 View 中,我们可以和用户进行数据交互,交互的数 据被提交到服务器,服务器根据用户提交的数据,经过控制器 Controller 进行判断并移交给 合适的函数进行处理的过程,称为 MVC 处理模式。如下图所示:
MVT 软件架构: Django 在处理的过程中,对于经典的 MVC 处理模式并不是非常认同,在实际项目开 发过 程中控制器 Controller 起到的作用非常的有限,所以 Django 将控制器部分也进行了 封装,但是同时扩展了视图 View 部分,增加了模板功能实现了前端网页的复用,所以 Django 的架构模式更加符合 MVT 处理模式。如下图所示:
Django快速入门
Django的下载安装
Django的版本
目前 Django 大的版本有两个分支:
➢ 1.x 版 稳定成熟的版本,目前企业都使用的这个大版本
➢ 2.x 版 18 年刚刚出现,目前不够稳定,建议可以简单的学习学习
一般来说,选择长期支持版本比较好。
pip install django==1.8
pip install django==1.11
pip install django ,默认下载最新版本
Django的下载
使用pip命令下载Django:
pip install django==版本号
sudo pip install django==版本号
检查是否下载安装成功:
django-admin --version
如若成功,会返回安装的版本号
第一个Django项目
首先cmd到命令行窗口
cd 到工作空间
执行 django-admin startproject 项目名称
该命令就会创建一个Django项目
django创建成功后,项目结构如下:
|-- mysite # 表示项目名称
|-- mysite # 根模块,根模块跟项目名称保持一致
|-- __init__.py # 模块描述文件
|-- settings.py # 项目的配置文件
|-- urls.py # 根路由模块
|-- wsgi.py # django实现wsgi,目前使用不到
|-- manage.py # 该文件是项目的命令文件,不需要我们修改
现在项目我们已经创建完成,下面来运行项目:
cd mysite
python manage.py runserver
如果出现如下界面,则表示项目成功:
1、 默认 Django 项目占据 8000 端口,如果我们需要修改,则在命令后直接加上端口号:
python manage.py runserver 9999
2、 指定特定的 ip 和端口完成访问
python manage.py runserver 192.168.10.145:9000
浏览器访问,则发现报错:
这个则因为 Django 项目如果需要使用特定的 ip 地址访问,则需要在 setting.py 配置文件中的 ALLOWED_HOSTS 配置中加入对应的 ip 地址。
ALLOWED_HOST = ["192.168.13.45"]
重启启动项目,就会发现报错消失。
3、 第二种方法,虽然好用,但是我们发现这样做,只能让配置到 ALLOWED_HOSTS 中的 ip 地址可以访问我们的项目,如果我们想要所有人都访问呢? 可以在 ALLOWED_HOSTS 中配置为*,匹配任意 ip 地址。 之后启动项目使用命令如下:
python manage.py runserver 0.0.0.0:9000 使用 0 匹配任意 ip 地址
4、Django 在 1.9 之后开始支持中文,修改 setting.py 中的 LANGUAGE_CODE 为 zh-Hans
LANGUAGE CODE = 'zh-Hans'
再次启动项目,就会发现英文变成中文了。
创建一个根模块视图
Django提供了完善的模块划分功能,所以我们很少在根项目下创建视图,但是我们刚刚开始,开始先在根项目下创建视图来学习一下。
首先进入到根项目下,创建一个views.py文件。
views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("<h1>hello Django,I coming</h1>")
完成视图函数的编写后,需要在路由配置文件中配置路由
urls.py:
from django.conf.urls import url
from django.contrib import admin
# 导入视图文件
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 配置路由信息,当用户访问 index 路径时,则表示有 views.index 函数类处理
url(r"^index/",views.index,name="index"),
]
启动项目,在地址栏输入:http://192.168.10.145:9000/index/
到此为止,一个视图已经被我们创建完成,路由匹配也成功了!!
创建第一个模块应用
在真正的企业开发中,实质我们需要分模块来管理项目的,Django 也提供了完善的模 块划分功能,很方便我们模块开发,下面我们来使用模块划分来完成一个项目案例。
首先进入到项目的主目录中来,之后执行 Django-admin startapp 模块名称:
# 进入项目文件夹
cd mysite/
# 创建第一个博客应用
django-admin startapp blog
完成后,项目结构如下:
|-- mysite # 项目名称
|-- mysite # 根模块
|-- __init__.py # 模块描述文件
|-- settings.py # 项目的配置
|-- wsgi.py # 实现了wsgi web网关接口
|-- blog # 子模块
|-- migrations # 同步数据的迁移文件的文件夹
|-- __init__.py # 模块描述文件
|-- admin.py # 后台管理系统用来管理子模块中的模型类的文件
|-- views.py # 子模块的视图文件
|-- urls.py # 需要我们创建,子模块的路由文件
|-- models.py # 定义模型类
|-- tests.py # 测试文件
|-- apps.py # 定义子模块项目项的文件
|-- manage.py # 项目的命令文件
模块创建完成后,Django 根项目还不知道新增加了一个模块,所以需要我们将新创建 的模块告诉根项目,打开根项目模块下的 setting.py 文件,找到 INSTALLED_APPS 选项:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 告诉根项目,我新增了一个模块
'blog',
]
现在,模块应用创建完毕,并且正常添加到了 Django 项目中了。以后我们开发项目, 实在是在不同的模块上开发,根项目只是作为管理整体项目存在,我们不会再在根项目上创 建视图和视图函数了。
创建模块中第一个视图处理函数
打开 myblog/views.py 视图处理文件,添加视图处理函数如下:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
print("博客首页")
return HttpResponse("<h1>博客首页</h1>")
在模块目录下创建一个新的 urls.py 文件,用来完成模块本身的路由配置:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r"^index/$",views.index,name="index"),
]
上面我们是在模块本身中进行的路由配置和视图对应函数,等完成这些配置后,我们需 要通知根项目,将我们的配置添加到根项目中去,在根项目的 urls.py 文件中配置,如下:
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
# 导入视图文件
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/',include("blog.urls")),
url(r"^$",views.index,name="index"),
]
至此,项目配置结束,启动项目。
项目运行之后,打开浏览器,再次访问 http://localhost:9000,出现项目默认页面
再次访问 http://localhost:9000/blog/index,出现博客应用页面