文章目录
HTTP协议简介(尾生抱柱)
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP协议特性
- 基于TCP/IP协议
http协议是基于TCP/IP协议之上的应用层协议 - 基于请求—响应模式
HTTP协议规定,请求从客户端发出,然后服务器端响应 该请求并返回。 - 无状态保存
HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。 - 无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
HTTP请求协议与响应协议
http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的响应协议。用于HTTP协议交互的信息被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。
请求协议
GET / HTTP/1.1 # 请求行
Host: 127.0.0.1:8889 # 请求头部
Connection: keep-alive # 请求头部
Upgrade-Insecure-Requests: 1 # 请求头部
... # 请求体
响应协议
HTTP/1.1 200 OK #状态码
Content-Type: text/html;charset=utf-8 # 响应头部
<h2>骑士计划</h2> # 响应体
请求方式: get与post请求
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的请求体中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
URL的组成部分
http :// www.luffycity.com [:80] /home/ logo.png ?name=alex#maodian
协议名称 分隔符 域名 默认80端口(不用写) 路径 文件 参数 锚点
自定义web框架
Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。
- 启动文件
manage.py
from wsgiref.simple_server import make_server
from urls import *
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
path = environ.get("PATH_INFO")
func = None
for item in urlpatterns:
if path == item[0]:
func = item[1]
break
if func:
ret = func(environ)
else:
ret = not_found(environ)
return [ret]
if __name__ == '__main__':
httpd = make_server('', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
urls.py
from views import *
urlpatterns = [
("/login/", login),
]
views.py
保存视图函数
def login(environ):
with open("templates/login.html", "rb") as f:
data = f.read()
return data
def not_found(environ):
ret = b'<h1>404 not found.!!!</h1>'
return ret
- templates模板目录(该目录下的
login.html
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="http://127.0.0.1:8080/login/" method="post">
<p>用户名:<input type="text" name="user"></p>
<p>密码:<input type="password" name="pwd"></p>
<input type="submit">
</form>
</body>
</html>
DIYWEB这个package就是一个web框架,下载这个web框架就可以快速实现一些简单的web功能。
Django
Django简介及简单使用
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式.
Python的Web框架有上百个,比它的关键字还要多。所谓Web框架,就是用于开发Web服务器端应用的基础设施(通常指封装好的模块和一系列的工具)。Python的Web框架中比较有名的有:Flask、Django、Tornado、Sanic、Pyramid、Bottle、Web2py、web.py等。在基于Python的Web框架中,Django是所有重量级选手中最有代表性的一位,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构提供了支持(MTV)。
MVC与MTV模型
MVC模型
所谓MVC就是把Web应用分为模型(M)、 控制器(C)和 视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
MTV模型
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是指:
- M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
Django下载
-
命令行模式
pip3 install django # 没有参数,默认下载最新版本 pip3 install django==1.11.x # 指定Django的下载版本 #当下载速度慢时,可以加上参数-i 切换国内镜像 pip3 install django -i http://pypi.douban.com/simple/
-
pycharm安装
file
—>settings
---->project 解释器
—> 点击+
----> 输入Django
—>install
(如果选择版本时,选择CheckBox
,选择指定版本)
创建项目
-
命令行创建项目
切换到想要创建项目文件的路径下django-admin startproject 项目名称
-
pycharm创建项目
file
—>new project
---- 选择Django
—> 配置路径和项目名称 —> 配置环境(默认用系统环境) ----> 点击create
(完成创建)
manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。
mysite/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
mysite/settings.py
:Django 项目的配置文件。
mysite/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。
mysite/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。 -
修改项目的配置文件
settings.py
Django是一个支持国际化和本地化的框架,因此刚才我们看到的默认首页也是支持国际化的,我们将默认语言修改为中文,时区设置为东八区。# 此处省略上面的内容 # 设置语言代码 LANGUAGE_CODE = 'zh-hans' # 设置时区 TIME_ZONE = 'Asia/Chongqing' # 此处省略下面的内容
创建APP
-
命令行
python3 manage.py startapp app名称
-
pycharm创建app
创建项目时,在
app name
输入APP的名称,就可以创建APP了.注意: 通过pycharm创建的,不用自己在settings里配置,但是,通过命令行的,一定手动,进行配置,否则,应用无法生效.
migrations
:存放与模型有关的数据库迁移信息。
migrations/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
admin.py
:可以用来注册模型,用于在Django的管理界面管理模型。
apps.py
:当前应用的配置。
models.py
:存放应用的数据模型,即实体类及其之间的关系(MVC/MVT中的M)。
tests.py
:包含测试应用各项功能的测试类和测试函数。
views.py
:处理请求并返回响应的函数(MVC中的C,MVT中的V)。 -
注册app:
在settings.py
里的INSTALLED_APPS
列表中,添加注册app。
有两种方法:INSTALLED_APPS = [..., "app01', ...]
INSTALLED_APPS = [..., "app01.apps.App01Config', ...]
# 推荐这种写法
启动运行Django项目
- 命令行
python3 manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0:8888 # 0.0.0.0:8888# 注意:要在manage.py同级目录执行命令
- pycharm 启动
点击右上角的绿色的三角按钮.
如需更改配置信息,请下拉选择edit,进行配置.
基于Django实现的一个简单示例
- url控制器
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('timer/', views.timer),
]
- 视图函数
from django.shortcuts import render
# Create your views here.
def timer(request):
import datetime
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return render(request, "timer.html", {"now_time": now_time})
- 模板文件(timer.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h3>当前时间为:{{ now_time }}</h3>
</body>
</html>