Django入门

Django入门

1、Web概念

1.1 HTTP协议

例如: https://www.baidu.com/

1.1.1 HTTP协议简介

​ 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

​ HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

​ 2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

1.1.2 HTTP协议概述

​ HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个"中间层”,比如代理服务器、网关或者隧道(tunnel)。

1.1.3 HTTP请求方法

​ HTTP/1.1协议中共定义了八种方法(也叫"动作”)来以不同方式操作指定的资源:

GET

​ 向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

HEAD

​ 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST

​ 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT

​ 向指定资源位置上传其最新内容。

DELETE

​ 请求服务器删除Request-URI所标识的资源。

TRACE

​ 回显服务器收到的请求,主要用于测试或诊断。

OPTIONS

​ 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT

​ HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:

  1. 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
  2. HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源*。*

请求方式: get与post请求

  • GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) POST方法是把提交的数据放在HTTP包的请求体中.
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
1.1.5 HTTP状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。状态代码的第一个数字代表当前响应的类型:

  • 1xx消息——请求已被服务器接收,继续处理

  • 2xx成功——请求已成功被服务器接收、理解、并接受

  • 3xx重定向——需要后续操作才能完成这一请求

  • 4xx请求错误——请求含有词法错误或者无法被执行

  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

状态码说明
200成功
301永久重定向
302临时重定向
400请求的数据错误
401要求身份认证
403拒决请求(身份认证失败)
404页面没有被找到。(一般是地址不对)
405请求的方法不对
500服务器内部错误
1.1.6 URL

http://www.donghaiming.cn/app01/student/?page=1&size=2

http: 80访问协议 https 443 ftp 21

www.donghaiming.cn:80 通过dns解析以后,是一个网络的ip地址,这个地址就是服务器的地址。

域名: 服务器的地址

/app01/student/

资源在服务器上目录

?page=1&size=2

访问资源所带的参数,以**?开头,key vaule形式,多个参数使用&**进行链接

1.2 动态、静态网站
1.2.1 静态网站

​ 静态网站是指我们使用html写入的,更改比较麻烦

1.2.2 动态网站

​ 我们其实展示数据的页面都是类似的,只是每一个位置上每一天的内容不一样,那么可以提前在这些位置挖一些,数据不再是写死的,而是通过数据库等手段传递到这些坑位上,而负责传递数据的这个部分,我们一般就叫做Web 框架

再详细些,那么就是获取用户的请求之后,进行一系列的操作处理,再为用户返回数据,并渲染到页面上

一次用户的访问,由两部分组合,发起Request请求,由框架返回Response

2、Django框架

2.1 框架介绍
2.1.1 Django由来

​ Django 最初是被开发用来管理劳伦斯集团旗下一些以新闻内容为主的网站。2003 年,Lawerence Journal-World 报社的 Web 开发者艾德里安威利森开始用 Python 语言去开发应用。新闻界的快节奏使他们必须提高产品的开发速度,于是他们两个人想办法构建出了节省开发时间的框架,这个框架将能复用的组件或者模块放在一起,使开发者不必重复的工作,这是 Django 诞生的根本原因。

​ 后来他们所在的开发小组决定将这个框架发布成一个开源软件。经过发展和时间的积累,Django 有了数以万计用户和贡献者,现在 Django 成为了 Web 开发者中最流行的框架。

	总之,Python 的诞生是为了减少重复性工作,节省开发者时间,可以让开发者把有限的精力投入到关键的开发环节中。 

​ 通过上面的介绍,可以给出 Web 框架的概念:它是一套组件,提供通用的设计模式,能够最大程度地降低开发 Web 站点开发的难度,Django 的设计目标就是使复杂的工作变得简单。

2.1.2Django框架的特点

​ 相对于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着 Django 模块之间紧密耦合。

Django 的主要特点如下:

  1. 完善的文档:经过 10 余年的发展和完善,Django 官方提供了完善的在线文档,为开发者解决问题提供支持。

  2. 集成 ORM 组件:Django 的 Model 层自带数据库 ORM 组件,为操作不同类型的数据库提供了统一的方式。

  3. URL 映射技术:Django 使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。

  4. 后台管理系统:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。

  5. 错误信息提示:在开发调试过程中如果出现运行异常,Django 可以提供非常完整的错误信息帮助开发者定位问题。

2.1.4 MVT&MVC

MVC 是 Model-View-Controller 的缩写,其中每个单词都有其不同的含义:

  • Modle 代表数据存储层,是对数据表的定义和数据的增删改查;

  • View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;

  • Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7G1Ei4ov-1622113210094)(images/image-20210527151432928.png)]

MVC 设计模式的请求与响应过程描述如下:

用户通过浏览器向服务器发起 request 请求,Controller 层接受请求后,同时向 Model 层和 View 发送指令;

  • Mole 层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 Controller 层;

  • View 层接收到 Controller 的指令后,加载用户请求的页面,并将此页面发送给 Controller 层;

  • Controller 层接收到 Model 层和 View 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。

MVC 的 3 层之间紧密相连,但又相互独立,每一层的修改都不会影响其它层,每一层都提供了各自独立的接口供其它层调用,MVC 的设计模式降低了代码之间的耦合性(即关联性),增加了模块的可重用性,这就是 MVC 的设计模式。

Django 借鉴了经典的 MVC 模式,它也将交互的过程分为了 3 个层次,也就是 MTV 设计模式;

  • Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;

  • Template:模板层(也叫表现层)具体来处理页面的显示;

  • View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。

同样我们也对 MTV 设计模式的请求与响应过程进行描述:

用户通过浏览器对服务器发起 request 请求,服务器接收请求后,通过 View 的业务逻辑层进行分析,同时向 Model 层和 Template 层发送指令;

  • Mole 层与数据库进行交互,将数据返回给 View 层;

  • Template 层接收到指令后,调用相应的模板,并返回给 View 层;

  • View 层接收到模板与数据后,首先对模板进行渲染(即将相应的数据赋值给模板),然后组织成响应格式返回给浏览器,浏览器进行解析后并最终呈现给用户。

2.2 安装
pip install django  # 不指定版本,默认安装 最新版本
# 指定版本安装
pip install django==2.2.20
2.3 项目创建
2.3.1 命令模式创建项目

创建项目命令

# django-admin startproject project_name
django-admin startproject mysite

1、自己创建一个文件夹,在地址栏输入cmd,进入命令行模式,并且进入到当前目录下。

# 输入 django-admin startproject project_name(project_name 代表你要命名的项目名称)
2、cd 进入mysite目录,启动项目

```python
# django启动项目的命令
python manage.py runserver

http: 访问协议

127.0.0.1 网卡的回环地址,

8000 django项目启动以后,默认端口号

3、使用pycharm(我自己使用pycharm)打开项目

file----> open-----打开项目所在目录,点击项目名称(mysite在这里是项目名称),点击OK
或者直接拖到pycharm中

4、设置python环境

file—>settings---->Project: mysite—Project Interpreter

在右边选择python环境。

这样就可以在pycharm当中启动项目,并且在写代码时有了提示。

项目启动成功提示
在这里插入图片描述

2.4 目录介绍

当我们打卡以后,里面有一个同项目名称的文件夹,打开以后,会出现以下这些文件夹名称,它们分别代表:

mysite    # 项目名称
	- mysite  # 项目同名目录
    	- __init__.py  # python环境
        - settings.py  # 项目的主要配置文件
        - urls.py      # 项目的主路由
        - wsgi.py      # 项目启动管理文件
	- db.sqlite3  # 默认使用的数据库
    - manage.py   # 项目管理文件
2.4.1 项目目录结构介绍
2.4.2 settings.py 配置

我们先了解setting.py其中的代码代表的含义

BASE_DIR   # 项目所在目录
SECRET_KEY  # 加密所使用的hash值
DEBUG   # 调试模式,为错误信息提示,为False时,会隐藏错误信息,不利于找错。
ALLOWED_HOSTS   # 允许访问的主机
INSTALLED_APPS  # 安装django子应用,是个列表形式,添加完成以后,要在后面添加,逗号
MIDDLEWARE  # django的中间件,用来处来django的请求和响应。还有session
ROOT_URLCONF  # 项目的根路由
TEMPLATES  # 模版配置
WSGI_APPLICATION  # 项目启动的使用的
DATABASES  # 配置数据库
AUTH_PASSWORD_VALIDATORS  # django的密码认证
LANGUAGE_CODE  # 语言,默认是en-us    改为中文简体: zh-hans
TIME_ZONE  # 时区, 默认是utc, 改为 Asia/Shanghai
USE_I18N
USE_L10N  # 让修改的时区生效
STATIC_URL  # 静态资源路径

3、 子应用

3.1 子应用是啥及其意义

应用是一个专门做某件事的网络应用程序,比如博客系统中的用户功能部分,一个考试系统中管理试卷的部分。

项目则是一个网站使用的配置和应用集合,一个项目可以包含很多个app****应用应用可以被很多个项目使用。


用户部分 APP帖子部分 APP
用户登录用户注册用户密码找回用户个人资料管理帖子发布、帖子评论、帖子编辑、帖子点赞点踩、帖子热度排名
3.2 子应用创建
# python manage.py startapp app_name
python manage.py startapp app01

app_name 应用名称

3.3 子应用目录结构

我们创建了子应用以后app01,它同样也有相应的文件,它们所代表的意义有:

app01  # 应用目录
	- migrations  # 数据迁移存放目录,不可以删除,也不可以删除里的__init__.py文件
    - __init__.py  # python 项目初始化文件
    - admin.py  # 后台管理文件,可以把建立的模型在这里进行注册使用
    - apps.py  # 应用的项目文件
    - models.py  # 在这里写数据库的模型文件
    - tests.py  # django的测试文件
    - views.py  # 这里完成项目的逻辑,对数据库进行增删改查操作在这里完成。
3.4 子应用视图逻辑

编写视图
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.


def index(request):
    return HttpResponse('<h1>hello world<h1>')
编写路由

使用主路由来显示页面

# mysite/urls.py
from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index)
]

使用子路由来显示 页面

1、在app01目录新建urls.py文件,写入以下内容

# 导入django下urls模块当中的path函数
from django.urls import path  
# 导入当前目录下的views文件
from . import views
# 路由列表
urlpatterns = [
    
]

2、 在主路由下进行配置子路由

"""
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('app01/', include('app01.urls')),
]

3、在子路由当中配置视图

# 导入django下urls模块当中的path函数
from django.urls import path
# 导入当前目录下的views文件
from . import views
# 路由列表
urlpatterns = [
    path('', views.index)
]
  1. Add a URL to urlpatterns: path(‘blog/’, include(‘blog.urls’))
    “”"
    from django.contrib import admin
    from django.urls import path, include

urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘app01/’, include(‘app01.urls’)),
]


3、在子路由当中配置视图

```python
# 导入django下urls模块当中的path函数
from django.urls import path
# 导入当前目录下的views文件
from . import views
# 路由列表
urlpatterns = [
    path('', views.index)
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值