史上最全——手把手开发Django网站建设

本文详细介绍了Django Web框架的基础知识,包括HTTP协议、Web服务器概念,以及Django的理解和MTV模式。逐步指导如何创建Django项目,详细讲解URL路由配置、视图响应函数和数据库的使用,特别强调了Django的URL路由机制和视图响应的不同类型,适合初学者进阶学习。

1、基础知识

1.1 HTTP协议

HTTP是一个基于“请求与相应”模式的、无状态的应用层协议。
HTTP协议是采用URL作为定位网络资源的标识。
格式:http://host:[port]/[path]
其中,

host:合法的Internet主机域名或IP地址。
port:端口号,缺省端口为80。
path:请求资源的路径。

1.2 HTTP协议对应的操作

方法说明
GET获取URL位置的资源
HEAD获取URL位置资源的响应消息报告,即获得资源的头部信息
PUT请求像URL位置储存一个资源,覆盖原有URL位置的资源
POST向指定URL位置的资源后附加新的数据
PATCH请求局部跟新URL位置的资源,覆盖原URL位置的资源
DELETE删除URL处指定的资源

1.3 Web服务器

Web服务器(Web Server)是软件工具。
Web服务器用于提供HTTP\HTTPS的网络访问服务。
Web服务器很成熟,只需要配置,不需要开发。
常用的Web服务器有:

  • Apatch(a patchy server):是Apache软件基金会的一个开放源码的网页服务器。
  • Nginx(engine x):是一款高性能的HTTP和反向代理web服务器。
  • Node.js:是一个基于Chrome V8的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O的模型。
  • Tomcat:Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
  • IIS(Internet Information Services):由微软公司提供的基于运行Microsoft Windows的互联网基本服务
  • BEA Weblogic:美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。

2、Django框架基础

2.1 Django的理解

  1. Django是一个Web框架。
  2. Django是一个产品级框架,支持全球近万个云端网络。
  3. Django采用MTV(Model-Template-View)模型组织。
  4. 和其他框架相比,Django充分利用Python的特点,开发效率高。

2.2 Django Web框架

Web框架描述

2.3 开发Django开发的最小程序

开发web框架的最小程序单元:
step1: 新建一个Web框架程序。
确定好具体的文件路径,然后: django-admin startproject myhtml,此时会创建以下内容:

  • myhtml/ # 外层根目录文件,名字可以改。
  • mysite/ # 工程目录,保存代码和文件。
    • __init__.py:# 一个将mysite定义为包的空文件。
    • urls.py:URL路由的声明文件(路由文件)
    • setting.py:部署和配置整个工程的配置文件(配置文件)
    • wsgi.py:基于WSGI的Web服务器的配置文件。
  • manage.py:一个与Django工程进行交互的命令工具。

step2:修改并添加功能
python manage.py startapp myapp
通过此条命令增加新的功能。
step2.1:创建一个具体的应用(app)。
step2.2:修改views.py:对URL的具体响应功能。
step2.3:修改URL路由:指定URL与响应之间的关系。

step3:调试运行Web框架(在myhtml工程目录下)
python manage.py myhtml

三种Django的运行管理方式:

  1. django-admin <command> [options]
  2. python manage.py <command> [options]
  3. python -m django <command> [options]

框架和功能的区别
工程(project)和应用(app)的关系:

  • 工程对于一个网站是应用于配置的集合。
  • 应用对应与特定的功能,是具体功能的载体。
  • 配置和功能分离是高度模块化的体现。

2.4 MTV开发模式

2.4.1 MTV开发框架

M:Models模型
V:Views视图
T:Templates模板
MTV开发模式

2.4.2 MTV开发模式——Web框架

Web框架



3. 通过web框架搭建一个最简易的程序:

第一步:新建一个web框架程序

  1. 通过CMD进入到想要创建web程序的文件夹
  2. 数据命令django-admin startproject yourhtml

第二步:修改并添加功能

  1. 创建一个具体的功能程序(app),代码如下
    python manage.py startapp yourapp
  2. 修改yourapp中的views.py(如果没有就创建),并输入以下代码:
from django.shortcuts import render
def hello(request):
	return render(request, '你想要展示的html')

这里需要说明的是:需要手动在你的yourapp文件夹下创建templates文件夹,然后放入你想要展示的文件

  1. yourapp中,新增urls.app文件(本地路由文件),并且输入以下内容:
from django.urls import path
from . import views
urlpatterns = [
	path('', views.hello)
	]
  1. 在全局路由文件yourhtml中的urls.py增加对应本应用的路由文件引用
from django.contrib import admin
from django.urls import include, path
from yourapp import views # 这里是你的功能文件的函数

urlpatterns = [
	path(r'', include('yourapp.urls')),
	path(r'', admin.site.urls),

这里有个坑就是,在path中第一个参数urls设置的时候需要置空,否则会报错。

  1. 设置模板路径,让Django框架能够找到模板对应目录
TEMPLATES = [
{
	'DIRS':[os.path.join(BASE_DIR, 'yourapp/templates')],
}
			]

第三步 调试运行程序

CMD到根目录(yourhtml)下,运行:
python manage.py runserver
会自动弹出网页,或者点击http://127.0.0.1:8000/也可以生成网页。

4、Django框架进阶内容

这一单元需要对Django的整个框架搭建有一个深入的了解。看完本章内容,你将收获:

  1. URL路由的机制。
  2. Views视图的类型。
  3. Views视图中流式相应机制。
  4. Django的模板引擎和模板使用
  5. Django模板语言入门。

4.1 URL路由的机制

Created with Raphaël 2.2.0 url 定义、转换、传参、命名等操作 views

4.1.1 Django的URL路由配置

  1. 路由是关联URL及其处理函数关系的过程。
    创建的settings.py中通过ROOT_URLCONF变量指定全局路由文件名称,一般路由名称与工程名称相同。
  2. Django使用urlpatterns变量名来添加路由,改变量是列表类型,一般有pathre_path组成。

4.1.2 Django的URL路由流程

Created with Raphaël 2.2.0 Django查找全局urlpatterns变量 Django按照先后顺序,对URL逐一匹配urlpatterns的每个元素 找到第一个匹配时停止查找,根据匹配结果执行对应处理函数 寻找对应的处理函数 进行后续处理 进行错误处理 yes no

注意:Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即只要路由路径相同,无论POST、GET等哪种请求方式都指向同一个操作函数。

4.1.3 path(route, view, kwargs=None, name)

  • route:表示url或者url模式,Django定义的url转换语法
  • view:处理(视图)函数的名称,包含include函数
  • kwargs:关键字参数,向处理函数提供额外的参数,以字典的形式表示
  • name:给path确定一个具体的名字
4.1.3.1 route的url格式转换
类型说明示例
精确字符串格式常规的路径结构。dir1/dir2
Django转换格式通过不同参数控制路径,可以将路径保存。dir1/<str:name>
正则表达式通过正则表达式控制路径。dir1/(?P<dir>[0-9]{1}
1) 精确字符串格式
  1. 适合静态单一的路径;
  2. 一个url匹配一个路径;
  3. url不用以/开头,但是要用/结尾;
2) Django转换格式
  1. 一个url模板,匹配一批url的同时,能够获得一批变量名作为参数。
  2. 常用形式,目的是通过url进行参数传递和获取。
  3. 采用<类型:变量名>的形式获取参数。
    转换格式类型
3)正则表达式

使用re_path函数,两种具体形式:

  • 简单的(pattern),不提取参数:path/([0-9]{4})/
  • 命名模式的(pattern),提取参数,统一为str类型:path/?P<name>[0-9]{4}
4.1.3.2 view的使用
  1. 处理函数:views.py处理函数,是url 的最终归宿。
    2)include处理函数:include(other.urls) 包含其他文件的url路径。有两重作用:
    ① 附加本地路由。
    ② 路径去重。
    路径去重
    为了避免系统找不到url,可以进行如下设置:
urlpatterns = [
path('',<根目录路径>)
re_path('^$',<跟目录路径>)
# 二选一即可

4.2 视图相应函数

视图函数接收HTTP请求并相应,可以放在任何地方,可以是任何功能。

  • 视图函数可以返回web文本、重定向、页面、请求、图片等任何内容。
  • 视图函数通过HttpResponse、JsonResponse等类表达并返回响应。
  • 视图函数一般放在对应app中的views.py中。

Django的相应类型:

  1. HttpResponse类及子类
  2. JsonResponse类
  3. StreamingHttpResponse类
  4. FileResponse类
  5. Render类
    下面对这五类分别进行阐述:

4.2.1 HttpResponse类及子类

1. HttpResponse响应一览表

编码定义描述
200HttpResponse常规响应,表示正常
301HttpResponsePermanentRedirect永久重定向
302HttpResponseRedirect访问重定向
304HttpResponseNotModified网页未发生变化
400HttpResponseBadRequest不良响应
403HttpResponseForbidden禁止访问
404HttpResponseNotFound网页丢失
405HttpResponseNotAllowed响应不被允许
410HttpResponseGone网页丢失
500HttpResponseServerError服务器错误

2. HttpResponse响应格式

HttpResponse(content, content_type=None,\
status=200, charset=None)

其中

  • content:拟返回的字符串
  • content_type:MIME格式的返回内容类型
  • status:响应的状态码
  • char_set:响应的字符集

3. HttpResponse 示例

Created with Raphaël 2.2.0 在全局路径中增加需要相应HttpResponse路径 在应用中增加HttpResponse相应函数
# 在框架的url中增加HttpResponse函数对应的路径
# 这个是yourhtml下的urls
from yourapp import views as yourappviews
urlpatterns = [
	path('', yourappviews.func)
	]
# 在yourapp中的views增加对应的func
from django.http import HttpResponse

def func(request):
	response = HttpResponse()
	response.write('do something now.') # 这里会生成一个新的网页。

4.2.2 JsonResponse类及子类

1. JsonResponse结构
JsonResponse(data):主要用于数据类型的相应,其中:
data是{key:value}的字典键值对,返回Json的数据格式。

2. JsonResponse示例

from django.http import JsonResponse

def func(request):
	Response= JsonResponse({'key':'value'})
	return response

Django下载文件最优的两种方法

4.2.3 StreamingHttpResponse类及子类

1. StreamingHttpResponse结构
StreamingHttpResponse(streaming_content):流式相应,内容的迭代器形式,以内容流的方式响应。

注:StreamingHttpResponse一般多现实在页面上,不提供下载。

以下为示例代码

def streamDownload(resquest):
	def file_iterator(filepath, chunk_size = 512):
		with open(filepath, 'rb') as f:
			while True:
				con = f.read(512)
				if con:
					yield con
				else:
					break
	filename = os.path.abspath(__file__) + 'test.txt'
	response = StreamingHttpResponse(file_iterator(filename)
	return response	
# 最后程序会将结果打印在显示器上

4.2.4 FileResponse结构类及子类

FileResponse(stream):以流形式打开后的文件

FileResponseStreamingHttpResponse的子类

def homeproc2(request):
	cwd = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
	response = FileResponse(open(cwd + "/msgapp/templates/youfile", "rb"))
	response['Content-Type'] = 'application/octet-stream'
	response['COntent-Disposition'] = 'attachment;filename="filename"'
	return response

需要解释说明的是:

	response['Content-Type'] = 'application/octet-stream'
	response['COntent-Disposition'] = 'attachment;filename="filename"'

Content-Type:用于指定文件类型。
COntent-Disposition:用于指定下载文件的默认名称,对,没错! “CO”两个字符都要大写
两者都是MIME协议里面的标准类型。

4.2.5 Render 类及子类

开发一个网页,如何“跨”多级MVC的类,如何变静态网页为动态网页,如何将自己的上下文组合成内容再返回到网页前端?
——此时就需要render()函数了。
1 render函数结构
render(request, template_name, context=None, content_type=None, status=None, using=None)

必选参数

  • request:用于生成相应的请求对象。
  • template_name:要使用的模板的全名或者模板的序列。如果给定了一个列表,则选择存在的第一个模板。

可选参数

  • context:表示要添加到模板上下文的值的字典。默认情况下,是一个空的字典,如果字典是可调用的,则视图将在渲染模板前调用它。
  • content_type:用于结果文档MIME类型默认为:setting配置文件:DEFAULT_CONTENT_TYPE的值。
  • status:默认相应为200。
  • using:用于加载模块的模块引擎:setting配置文件:NAME

2 render函数示例

from django.shortcuts import render
def my_view(request):
	return render(request, 'my_app\index.html', {'foo':'bar'}, content_type='application\xhtml+xml)

↓↓↓相当于以下内容↓↓↓

from django.http import HttpResponse
from django.template import loader
def my_view(request):
	t = loader.get_template("my_app\index.html")
	c = {"foo":"bar"}
	return HttpResponse(t.render(request, c), content_type='application\xhtml+xml')

5、数据库的使用

Django通过自带的ORM框架操作数据库,可以支持自带的sqlite3数据库。

5.1 数据库使用流程

Created with Raphaël 2.2.0 配置sqlite3数据库环境变量 编辑sqlite3数据库 操作sqlite3数据库

5.1.1 配置sqlite3数据库环境

step1:配置sitting.py中的INSTALLED_APPS增加webserver_1

需要让Django明白给那个app建表

创建与APP同名的数据库表。
step2:配置sitting.py中的DATABASE中的ENGINENAME函数,默认为sqlite3数据库。
在这里插入图片描述

5.1.2 编辑sqlite3数据库

一般将数据库的便捷放在Model中。

编辑MTV中的M,编辑models.py文件,在model.py中建立需要采集的数据字段。
在model.py中建立需要采集的数据字段。

5.1.3 操作sqlite3数据库

两个命令后+业务逻辑
命令1:python manage.py makemigration创建数据库表,如下图所示:
在这里插入图片描述
命令2:python manage.py migrate迁移数据文件,生成了db.sqlite3文件,看不懂有什么具体的作用。
生成了批量的数据文件

修改业务逻辑:

  1. 将获取到的数据保存到数据库中。
	models.UserInfo.objects.create(user=username, password=password
  1. 然后获取数据库中的数据内容。
	models.UserInfo.objects.all()

具体的内容如下:
在这里插入图片描述
这样,重启web服务器后,刷新浏览器页面,所有的数据都可以保存到相应的数据库中。任何时候都可以从数据库中读取相应的数据内容,然后展示到相应的数据页面上啦。

到此,一个框架完整,要素齐全的Django项目就完成啦!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Better_Zflyee

交个朋友,多多交流~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值