0
点赞
收藏
分享

微信扫一扫

python从零学习搭建测试平台(三)

夜空一星 2022-04-17 阅读 21
python

自定义一个简单的web框架

urls.py文件,路径和要执行的函数的对应关系

import views
urlpatterns = [
	# ('/', views.html),
	# ('/xx.css', views.css),
	# ('/1.jpg', views.jpg),
	# ('/xx.js', views.js),
	# ('/person', views.person),
	('/index', views.index),

]

views.py, 写逻辑

def index():
	with open('templates/index.html', 'rb') as f:
			data = f.read()
	return data
	# conn.send(data)
	# conn.close()

wsgi.py,封装socket 接受请求,发送响应

import time
from threading import Thread
from wsgiref.simple_server import make_server
from urls import urlpatterns

def run():

	# wsgiref本身就是个web框架,提供了一些固定的功能(请求和响应信息的封装,不需要我们自己写原生的socket了也不需要咱们自己来完成请求信息的提取了,提取起来很方便)
	# 函数名字随便起
	def application(environ, start_response):
		'''
		:param environ: 是全部加工好的请求信息,加工成了一个字典,通过字典取值的方式就能拿到很多你想要拿到的信息
		:param start_response: 帮你封装响应信息的(响应行和响应头),注意下面的参数
		:return:
		'''
		start_response('200 OK', [])  #
		print(environ)
		print(environ['PATH_INFO'])  # 输入地址127.0.0.1:8000,这个打印的是'/',输入的是127.0.0.1:8000/index,打印结果是'/index'

		path = environ['PATH_INFO']
		for item in urlpatterns:
			if item[0] == path:
				# t = Thread(target=item[1],args=(conn,))
				# t.start()
				data = item[1]()
				break
		else:
			data = b'page no found!'
		return [data]

	
	httpd = make_server('127.0.0.1', 8080, application)

	print('Serving HTTP on port 8080...')
	# 开始监听HTTP请求:
	httpd.serve_forever()


models.py 建表用的

import pymysql

def create_model():

	conn = pymysql.connect(
		host='127.0.0.1',
		port=3306,
		user='root',
		password='',
		database='nbweb',
		charset='utf8'
	)
	cursor = conn.cursor()

	sql = 'create table userinfo(id int primary key auto_increment, name char(10) not null, age int unsigned);'
	cursor.execute(sql)
	conn.commit()

	conn.close()


manage.py, 项目的入口文件

import sys
from wsgi import run
from models import create_model

# python manage.py xx xx2
# 执行py文件时,后面携带的参数,可以通过py文件中的sys模块的sys.argv这个属性拿到,是个列表,列表第一项是文件名称,第二项之后,都是携带的参数
commands = sys.argv # xx xx2
# ['manage.py', 'xx', 'oo']


# 运行项目的指令: python manage.py runserver
# 数据库同步指令: python manage.py migrate
a1 = commands[1]
if a1 == 'runserver':
	run()
elif a1 == 'migrate':
	create_model()


以上作为学习框架的入门

以下,再次详细学习记录http协议

概念:
名称:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)

版本: 1.1, 目前有2.0版本,只不过没有广泛应用

http协议是基于TCP/IP协议之上的应用层协议。 分为两步:请求 – 响应

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器将该 html 文本并显示内容;

上一篇中打印的get请求数据

recv_data----- b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8800\r\nUpgrade-Insecure-Requests: 1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15\r\nAccept-Language: zh-cn\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\n\r\n'

请求消息格式:

img

请求数据说明: GET请求方法的请求数据在请求函个的URL部分,POST请求携带的数据在请求数据部分.

请求头键值对:

	USER-AGENT:chorme....   客户代理程序信息
​	HOST: 请求的服务端地址
​	Accept: 客户端可以接受的数据类型

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代理服务器)。

注意事项:

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

get和post的简答区别

	GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(POST方法是把提交的数据放在HTTP包的请求数据部分.
	GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
    POST的数据不再url上面显示,所以看着安全一些.

MVC框架与MTV框架

MVC框架是什么呢:

M:model.py 就是和数据库打交道用的,创建表等操作
    V:View 视图(视图函数,html文件)
    C:controller 控制器(其实就是我百度云代码里面那个urls文件里面的内容,url(路径)分发与视图函数的逻辑处理)

Django叫做MTV框架

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
  除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
在这里插入图片描述

django的使用

1、下载Django:

# pip下载下来的django你就理解成一个模块,而不是django项目,这个模块可以帮我们创建django项目)
pip3 install django==指定版本

2、创建一个django project

django-admin startproject 项目名称

目录结构:
在这里插入图片描述

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与项目交互等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。
wsgi.py ---- runserver命令就使用wsgiref模块做简单的web server,后面会看到renserver命令,所有与socket相关的内容都在这个文件里面了,目前不需要关注它。

 #此时已经可以启动django项目了,只不过什么逻辑也没有呢
 python manage.py runserver 127.0.0.1:8080 

3、在mysite目录下创建应用

python manage.py startapp blog   #通过执行manage.py文件来创建应用,执行这句话一定要注意,你应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
python manage.py startapp blog2  #每个应用都有自己的目录,每个应用的目录下都有自己的views.py视图函数和models.py数据库操作相关的文件

在这里插入图片描述
其中两个文件

models.py :之前我们写的那个名为model的文件就是创建表用的,这个文件就是存放与该app(应用)相关的表结构的
views.py  :存放与该app相关的视图函数的

4、启动django项目

python manage.py runserver 8080   # python manage.py runserver 127.0.0.1:8080,本机就不用写ip地址了 如果连端口都没写,默认是本机的8000端口

将来创建django项目,很少用命令行了,就用pycharm来创建
 在这里插入图片描述
 在这里插入图片描述

在这里插入图片描述

举报

相关推荐

0 条评论