初识Django(DNS原理及web框架)
DNS的原理
假设www.abc.com的主机要查询www.xyz.abc.com的服务器ip地址。
知识点
1、hosts文件:以静态映射的方式提供IP地址与主机名的对照表,类似ARP表
2、域:abc.com是一个域,它可以划分为多个区域,如abc.com和xyz.abc.com
3.DNS: 记录着 域名以及IP的对应关系
根DNS服务器
顶级DNS服务器.com
权威DNS服务器163,com
二级域名的DNS服务器
步骤
递归查询
第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找
第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的DNS服务器查询
第四步:‘根DNS服务器’根据查询域名中的‘xyz.com’,再向xyz.com的区域服务器查询
第五步:www.xyz.abc.com的DNS服务器直接解析该域名,将查询到的ip再原路返回给请求查询的主机
迭代查询
第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,在DNS本地服务器(即域服务器)查找所有本层次的区域服务器
第三步:本地DNS服务器查不到就查询上一层次的所有区域服务器,以此类推直至根域名DNS服务器‘.’
第四步:到达根域名服务器后又向下查询,直至查到结果为止。
迭代查询与递归查询结合
递归查询需要经过逐层查询才能获得查询结果,当查询具有许多层次的DNS结构时效率很低,所以一般采用两者相结合的查询方式。
第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找
第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的根DNS服务器查询
第四步:根DNS服务器直接将其区域DNS服务器的ip地址返回给本地服务器,而不用再向xyz.com的区域服务器查询。
第五步:本地DNS服务器将结果返回给请求的主机
web框架的原理
一、web框架搭建分一下几步
1、首先搭建一个服务器接收客户端发来的请求数据包
2、对客户端发来的数据包进行分析与拆分得到想要的数据
header = data.split('\r\n\r\n')[0].split('\r\n')[0]
url = header.split(' ')[1]
3、创建一个路由关系映射,将不同的请求映射到不同的方法种
4、在方法使用mysql中连接数据库,并将得到的数据进行循环拼接成html中的表格的形式
5、将拼接后的数据和html文件中的@@content@@进行替换
6、换回替换后的数据给客户端
二、代码
.py的代码
import socket
def f1():
fp = open('index.html', 'rb')
data = fp.read()
fp.close()
return data
def f2():
import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',password='456',db='db1',charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select sid,sname,gender,class_id from student'
cursor.execute(sql)
res = cursor.fetchall()
print(res)
res_list = []
for user in res:
res_str = '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' % (user['sid'],user['sname'],user['gender'],user['class_id'])
res_list.append(res_str)
s = ' '.join(res_list)
fp = open('index.html', 'r',encoding='utf-8')
data = fp.read()
data = data.replace('@@content@@',s)
fp.close()
return bytes(data,encoding='utf-8')
router = [
('/index', f1),
('/xxx', f2),
]
def run():
server = socket.socket()
server.bind(('127.0.0.1',9999))
server.listen(5)
while True:
cli,add = server.accept()
buf = cli.recv(1024)
if not buf:
print('断开连接')
cli.close()
data = str(buf,encoding='utf-8')
header = data.split('\r\n\r\n')[0].split('\r\n')[0]
url = header.split(' ')[1]
func_name = None
for i in router:
if i[0] == url:
func_name = i[1]
break
if func_name:
res = func_name()
else:
res = b'404'
cli.send(bytes('HTTP/1.1 200 OK\r\n\r\n',encoding='utf-8'))
cli.send(res)
cli.close()
if name == 'main':
run()
.html的代码
登录
SID | Name | Gender | Class_id |
---|
初识Django(DNS原理及web框架)的更多相关文章
- day 52 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...
- day 65 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...
- django基础一之web框架的本质
一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
- Django学习笔记之Web框架由浅入深和第一个Django实例
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- 01.Django基础一之web框架的本质
一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...
- Django学习篇(web框架的由来)
Python的WEB框架有 Django.Tornado.Flask 等多种 ,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多 ...
- django基础 -- 1. 前奏 web框架的本质
一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...
- django笔记(python web框架)
1.Python 下载地址:https://www.python.org/downloads/ 2.Django 下载地址:https://www.djangoproject.com/download ...
- 初识Flask——基于python的web框架
参考教程链接: https://dormousehole.readthedocs.io/en/latest/ (主要)https://www.w3cschool.cn/flask/ 目录: 1.写了一 ...
随机推荐
- 工控安全入门(七)—— plc的网络
上一篇我们详细分析了bootram和Vxworks的基本启动流程,这篇文章中我们把视线转到plc的网络部分,同时来复现我们第一个.第二个工控安全漏洞. VxWorks的网络设备驱动 一般我们说有三种设 ...
- InnoDB: Error number 24 means ‘Too many open files’
一.问题的描述 备份程序 执行前滚的时候报错.(-apply-log) InnoDB: Errornumber 24 means 'Too many open files'. InnoDB: Some ...
- 应读的paper
1.Faster R-CNN:https://arxiv.org/abs/1506.01497(已读) 2.FPN(Feature Pyramid Networks for Object Detect ...
- springmvc:请求参数绑定集合类型
一.请求参数绑定实体类 domain: private String username; private String password; private Double money; private ...
- vim编辑器操作②
本文主要介绍vim的常用编辑命令: 字符编辑: x:删除光标所在处的字符: #x:删除光标所在处起始的#个字符: 替换命令: r:替换光标所在处的字符: rCHAR; 例如:替换list中的l为大写L ...
- Django项目:CRM(客户关系管理系统)--46--38PerfectCRM实现全局账号登录注销01
python.exe manage.py startapp gbacc #urls.py """PerfectCRM URL Configuration The `url ...
- uni-app开发的应用(小程序,app,web等),使用Node+Koa2开发的后端程序接收上传文件的方法
uni-app使用使用Node+Koa2开发的后端程序接收上传的文件 通过gitbook浏览此随笔 通过其它客户端上传(h5,小程序等),接收方法一致 使用koa接收时,我们需安装一个中间件koa-b ...
- mac上mamp用navigate连接不上
参考 http://blog.sina.com.cn/s/blog_6742643c0100r9qp.html
- 了解真实的『REM』多终端屏幕适配
作者:hbxeagle 链接:github.com/hbxeagle/rem/blob/master/README.md rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使 ...
- jnhs 无法提交断点LineBreakpoint hibernate4CURD : -1, 原因是: 找不到 URL 'file:/E:/版本控制/Design-java/hibernate4CURD/' 的源根目录。请验证项目源的设置。
无法提交断点LineBreakpoint hibernate4CURD : -1, 原因是: 找不到 URL 'file:/E:/版本控制/Design-java/hibernate4CURD/' 的 ...