zoukankan      html  css  js  c++  java
  • 初识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(' ')[0].split(' ')[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('
    
    ')[0].split('
    ')[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
    
    ',encoding='utf-8'))
        cli.send(res)
        cli.close()
    

    if name == 'main':
    run()

    .html的代码

    登录 @@content@@
    SID Name Gender Class_id
  • 相关阅读:
    SpringIoC和DI注解开发
    SpringIoC&DI
    Linux基础(二)
    Linux基础(一)
    代码自动生成
    luaScript目标点限流工具类示例
    SpringMVC请求连接匹配器-工具类
    解决commons.mail.HtmlEmail附件中文名乱码问题
    HtmlToPdfUtils [请参照码云上 https://gitee.com/bbevis/html-to-pdf 最新版]
    ThreadLocalUtils
  • 原文地址:https://www.cnblogs.com/luowenConnor/p/11160648.html
Copyright © 2011-2022 走看看