Django简介
Django2005年发布,采用Python语言编写的开源框架,早期时候的Diango是用来做新闻与内容管理里的,一个重量级 的Python Web 框架!
Django配备了常用的大部分组件
1.URL 解析
2.原生HTML模板系统
3.数据库连接和ORM数据库管理
4.ORM模型系统
5.电子邮件发送系统
6.CSRF 跨站点请求伪造的保护
7.表单验证
8.数据库管理系统
9.自带强大的后台管理功能
Django特点:
1. 快:Django旨在帮助开发人员尽快将应用程序从概念到完成。
2. 完美功能:Django包含许多附加功能,可用于处理常见的Web开发任务。如用户身份验证、内容管理、后台管理 等更多任务。
3. 安心安全: Django 非常重视安全性,并帮助开发人员避免许多常见的安全错误,例如 SQL 注入、跨站点脚本、 跨站点请求伪造和点击劫持。其用户身份验证系统提供了一种安全的方式来管理用户帐户和密码。
4. 扩展性强: 互联网上一些最繁忙的站点使用 Django 的能力来快速灵活地扩展以满足最繁忙的流量需求。
5. 令人难以置信的多才多艺: 公司、组织和政府已经使用 Django 构建了各种各样的东西——从内容管理系统到社交网络再到科学计算平台。
使用Django,您可以在几个小时内将Web应用程序从概念到启动。Django处理了Web开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费和开源的。
常用的Web应用工具
身份验证,缓存,分页,静态文件管理,数据验证,表单验证,电子邮件发送系统
Django框架遵循MVC设计,并有一个专有名词: MVT
M:Model:模型, 和MVC中M功能相同,和数据库进行交互。
V:View:视图, 和MVC中C功能相同,接收请求,进行处理,与M和T进行交互,返回应答
T:Template:模板, 和MVC中V功能相同,产生html页面。
MVC和MVT模式
MVC最初是由施乐公司旗下的帕罗奥多研究中心中的一位研究人员给 smalltalk语言发明的一中软件设计模式。
是一种程序设计模式,其核心思想是分工、解耦、让不同功能的代码块之间降低耦合,增强代码的可扩展性和可移植性。
MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心 (Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式,是为了将传统的输入(input)、处 理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。随着标准输入输出设备的出现, 开发人员只需要将精力集中在业务逻辑的分析与实现上。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模 式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。现在虽然不再使用原来的分工方式,但是这种分 工的思想被沿用下来,广泛应用于软件工程中,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器 (Controller) ,是一种典型并且应用广泛的软件架构模式。后来,MVC的思想被应用在了Web开发方面,被称为W eb MVC框架。
MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实 现向后兼容。
当前主流的开发语言如Java、PHP、Python中都有MVC框架。
MVC的产生理念: 分工,让专门的人去做专门的事。
MVC的核心思想: 解耦。
下图是MVC模式:
Django的MVT模式:
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理, view再调用相应的Model和Template
Django框架图示:
Django 下载:
安装指令:
pip3 install Django==3.0.8 -i
https://pypi.tuna.tsinghua.edu.cn/simple
(卸载 django : pip3 uninstall django)
创建第一个Django项目
django-admin startproject + 项目名称
查看项目创建的文件
mmanage.py 是项目管理文件,通过它管理项目
与项目同名的目录,此处为My_Django
__init__.py 是一个空文件,作用是这个目录My_Django可以被当作包使用
settings.py 是项目的整体配置文件。启动服务时自动调用
urls.py 是项目的URL配置文件。所有的动态路径必须走该文件进行配置
wsgi.py 是项目与WSGI兼容的Web服务器入口
创建APP应用
使用一个应用开发一个业务模块
python3 manage.py startapp + app名称
_init.py__ 是一个空文件,表示当前目录
booktest 可以当作一个python包使用。
tests.py 文件用于开发测试用例。
models.py 文件跟数据库操作相关。
views.py 文件跟接收浏览器请求,进行处理,返回页面相关。
admin.py 文件跟网站的后台管理相关。
安装应用:
应用创建成功后,需要安装才可以使用,也就是建立应用和项目之间的关联,在 My_Django/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。
启动Django项目
命令行启动
在Django项目的根目录下,执行如下命令:
python3 manage.py runserver 8080 # 以8080端口启动
可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000
Django配置信息
settings.py
该文件用于配置整个网站的环境和功能,核心配置必须有项目路径、秘钥配置、域名访问权限、App 列表、中间件、资源文件、模板配置、数据库的连接方式。
项目路径 BASE_DIR :主要通过OS模块读取当前项目在计算机系统的具体路径,该代码在创建项目时 自动生成,一般情况下无需修改
秘钥配置:SECRET_KEY :这是一个随机值,在项目创建时自动生成,一般情况下无需修改。主要用 于重要数据的加密处理,提高项目的安全性,避免遭遇到攻击者恶意破坏。秘钥主要用于用户密码, CSRF机制和会话 Session等数据加密。
调试模式DEBUG : 该值为布尔类型。如果在开发调试阶段,那么应设置为True,在开发调试过程中会 自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统。如果项目部署上线,则改为False, 否则会泄露项目的相关信息。
域名访问权限 ALLOWED_HOSTS:设置可访问的域名,默认值为空列表。当DEBUG为True,并且 ALLOWED_HOSTS为空列表时,项目只允许以 localhost 或 127.0.0.1在浏览器上访问。当DEBUG为 False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置 ALLOW_HOSTS=['*']
App列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth、和 sessions等配置信息,这些都是Django内置的应用功能说明如下:
admin: 内置的后台管理系统
auth: 内置的用户认证系统
contenttypes: 记录项目中所有model元数据(Django 的ORM框架)
sessions: Session 会话功能,用于标识当前访问网站的用户身份,记录相关用户信息
messages: 消息提示功能
staticfiles: 查找静态资源路径
如果在项目中创建了App,就必须在App列表添加App名称。将MySite 项目已创建的App添加到App列表
MIDDLEWARE: Django的中间件配置信息,刚开始学习时可在配置文件中暂时禁用csrf中间件,方便 表单提交测试。
数据库配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。
DATABASE = {
'default' : {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
使用MySQL数据库首先需要安装驱动程序pip install PyMySQL
在Django的工程同名子目录的init.py文件中添加如下语句:
import pymysql
pymysql.install_as_MySQLdb()
# 作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。
修改DATABASES配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'mysql', # 数据库用户密码
'NAME': 'book' # 数据库名字
}
}
在MySQL中创建数据库
create database book charset=utf8;
本地语言与时区:
Django支持本地化处理,即显示语言与时区支持本地化。
本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用 简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示。
初始化的工程默认语言和时区为英语和UTC标准时区
LANGUAGE_CODE = 'en-us' # 语言
TIME_ZONE = 'UTC' # 时区# 时区
将语言和时区修改为中国大陆信息
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
静态文件
项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在 html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。
为了提供静态文件,需要配置两个参数:
STATICFILES_DIRS存放查找静态文件的目录
STATIC_URL访问静态文件的URL前缀
STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 静态文件存放位置
]
Django基础必备三件套
from django.shortcuts import HttpResponse, render, redirect
HttpResponse
内部传入一个字符串参数,返回给浏览器。
例如:
def index(request):
# 业务逻辑代码
return HttpResponse("OK")
render
除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。 将数据填充进模板文件,最后把结果返回给浏览器。
例如:
def index(request):
# 业务逻辑代码
return render(request, "index.html", {"name": "rose", "hobby": ["LOL", "DNF"]})
render包含3个参数:
第一个参数为request对象
第二个参数为模板文件路径
第三个参数为字典,表示向模板中传递的上下文数据
redirect
接受一个URL参数,表示跳转到指定的URL。
例如:
def index(request):
# 业务逻辑代码
return redirect("/home/")
项目开发流程
1.创建项目
django-admin startproject bookmanager
2.创建应用
python manager.py startapp book
3.安装应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#添加子应用
'book.apps.BookConfig'
]
4.本地化
#设置中文
LANGUAGE_CODE = 'zh-Hans'
#亚洲上海时区
TIME_ZONE = 'Asia/Shanghai'
5.static 静态资源配置
STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 静态文件存放位置
]
6. 项目中匹配urls
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('booklist/',views.booklist)
]
7.准备视图
# 定义视图:提供书籍列表信息
def bookList(request):
# 逻辑代码
return HttpResponse('OK!')
8.开启服务器, 测试项目
# 进入项目文件中, 开启项目对应的服务器
python manage.py runserver
# 浏览器中输入网址
http://127.0.0.1:8000/booklist/