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

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框架

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模板

2.4.2 MTV开发模式——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路由的机制

4.1.1 Django的URL路由配置

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

4.1.2 Django的URL路由流程

注意: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响应一览表

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

2. HttpResponse响应格式

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

其中

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

3. 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 数据库使用流程

5.1.1 配置sqlite3数据库环境

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

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


step2:配置sitting.py中的DATABASE中的ENGINENAME函数,默认为sqlite3数据库。

5.1.2 编辑sqlite3数据库

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

编辑MTV中的M,编辑models.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项目就完成啦!

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务