day57,DNS详解,web框架原理,django的安装和使用

DNS是什么

  dns全称Domain Name System,又称域名系统,是互联网的一项服务,

  主要在dns服务器中保存着域名和ip地址的对应关系,为人们提供域名解析服务。

  全球一共有13台根dns服务器,美国10台,欧洲2台,分布在英国和瑞典,

  亚洲1台,在日本。

DNS架构

  服务器的包含关系是:具体如下图

    根DNS服务器  > 顶级DNS服务器 > 权威DNS服务器 > 二级域名的DNS服务器

  根DNS服务器  :掌握着所有顶级dns的ip和域名的对应关系

  顶级DNS服务器 :掌握着权威dns的ip和域名的对应关系

    eg:  .com   .cn   .org

  权威DNS服务器 :掌握着二级域名dns服务器的ip和域名的对应关系

    eg:  baidu.com  sina.com

  二级域名的DNS服务器 :掌握着你要访问的域名和ip的对应关系

    eg:  www.baidu.com  new.sina.com

在浏览器输入url按下回车的整个过程

大方向分为三个过程

  1.把输入的url域名通过dns解析成ip地址

  2.浏览器向ip发送请求信息(包括请求头Request Headers和请求体Request Body)

  3.服务器向浏览器回应一个响应信息(包括响应头Response Headers和响应体Response Body)

但是dns解析的过程又可分为下面六个过程,具体看下图

  1.先向本地dns缓存查看有没有该域名对应的ip地址,有直接跳出,没有接着往下

  2.向根dns服务器询问域名对应的ip地址(根dns服务器会让他去查询顶级dns服务器)

  3.向顶级dns服务器询问域名对应的ip地址(顶级dns服务器会让他去查询权威dns服务器)

  4.向权威dns服务器询问域名对应的ip地址(权威dns服务器会让他去查询二级dns服务器)

  5.向二级dns服务器询问域名对应的ip地址(二级dns服务器会返回对应的ip地址)

  6.接收到ip地址后,会先把ip和域名对应关系保存到本地dns缓存,以便下次方便访问

 

web框架原理

web框架主要分为三个部分

  1、启动socket服务端

  2、路由系统,写出uri与函数的对应关系

  3、模板引擎渲染,将html页面与mysql中的数据进行融合

启动socket服务端

复制代码
import socket
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
# ①写socket服务端
while True:
    conn, addr = server.accept()

    data = conn.recv(8192)
    data = str(data,encoding='utf-8')
    header = data.split('\r\n\r\n')[0].split('\r\n')[0]
    # 拿到需要的头部信息 GET / HTTP/1.1
    router = header.split(' ')[1]
    # 获取浏览器访问的uri信息 /

    # 我们要写一个uri与对应函数的映射关系
    # 拿出uri对应的函数名,调用
    func_name = None
    for rout in router_list:
        if rout[0] == router:
            func_name = rout[1]
            break
    # 判断访问的uri是否存在映射关系
    if func_name:   # 有就存在
        res = bytes('访问成功',encoding='utf-8')
    else:
        res = bytes('访问不存在',encoding='utf-8')

    # 拿到要返回给浏览器的结果后开始返回数据

    # 我们需要先返回一个响应头
    conn.send(bytes('HTTP/1.1 200 OK \r\n\r\n'))    # 最简单的响应头
    # 再发送主体信息
    conn.send(res)
    # 关闭一次连接
    conn.close()
复制代码

路由系统 - uri与函数的对应关系

复制代码
# ②写函数与uri的映射关系
def home():
    pass

def index():
   pass

router_list = [
    ('/',home),
    ('/index',index)
]
# ①写socket服务端
while True:
    conn, addr = server.accept()

    data = conn.recv(8192)
    data = str(data,encoding='utf-8')
    header = data.split('\r\n\r\n')[0].split('\r\n')[0]
    # 拿到需要的头部信息 GET / HTTP/1.1
    router = header.split(' ')[1]
    # 获取浏览器访问的uri信息 /

    # 我们要写一个uri与对应函数的映射关系
    # 拿出uri对应的函数名,调用
    func_name = None
    for rout in router_list:
        if rout[0] == router:
            func_name = rout[1]
            break
    # 判断访问的uri是否存在映射关系
    if func_name:   # 有就存在
        res = bytes('访问成功',encoding='utf-8')
    else:
        res = bytes('访问不存在',encoding='utf-8')

    # 拿到要返回给浏览器的结果后开始返回数据

    # 我们需要先返回一个响应头
    conn.send(bytes('HTTP/1.1 200 OK \r\n\r\n'))    # 最简单的响应头
    # 再发送主体信息
    conn.send(res)
    # 关闭一次连接
    conn.close()
复制代码

模板引擎渲染

自定义规则

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>渲染模板</title>
</head>
<body>
<table>
    <!--占位字符-->
    @@content@@
</table>
</body>
</html>

渲染的页面
渲染的页面
def home():
    # 返回静态页面
    # 先读出静态html文件
    f = open('静态页面.html','r')
    data = f.read()
    f.close()
    return bytes(data,encoding='utf-8')


def index():
    # 也要先读出html页面
    f = open('静态页面.html', 'r')
    data = f.read()
    f.close()

    # 模板引擎渲染,将html代码与mysql数据库进行融合(自己定制规制,或者使用第三方工具)
    # 第一种,自定义规则,先在需要放数据的地方用自定义的占位符占位
    # 链接数据库,取出想要的数据
    import pymysql
    conn = pymysql.connect(host='127.0.0.1',user='root',password='123',
                           database='db1',charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select * from table1"
    res = cursor.fetchall()
    # 取出来的是一个列表里面套字典的形式,我们需要拿出我们需要的值进行字符串拼接
    r_list = []
    for r in res:
        s = '<tr><td>%s</td><td>%s</td></tr>'%(r['name'],r['pwd'])
        r_list.append(s)
    # 全部添加完之后再做一个整体的拼接
    need = ''.join(r_list)
    # 拼接好之后进行替换出我们之前html中的占位字符
    res = data.replace('@@content@@',need)
    # 替换好之后可以把信息返回给浏览器了
    return bytes(res,encoding='utf-8')

server服务端
server服务端
def home():
    # 返回静态页面
    # 先读出静态html文件
    f = open('静态页面.html','r')
    data = f.read()
    f.close()
    return bytes(data,encoding='utf-8')


def index():
    # 也要先读出html页面
    f = open('静态页面.html', 'r')
    data = f.read()
    f.close()

    # 模板引擎渲染,将html代码与mysql数据库进行融合(自己定制规制,或者使用第三方工具)
    # 链接数据库,取出想要的数据
    import pymysql
    conn = pymysql.connect(host='127.0.0.1',user='root',password='123',
                           database='db1',charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select * from table1"
    res = cursor.fetchall()


    # 第二种模板引擎渲染是通过第三方的工具,这里用的是jinja2
    from jinja2 import Template
    template = Template(data)
    res = template.render(user= res) # 这里需要把key和html里的占位符对应好
    return bytes(res,encoding='utf-8')

server服务端
使用第三方工具jinja2
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>渲染模板</title>
</head>
<body>
<table>
<!--    这里的占位符是{{name}} 外面传值必须通过key,value传值, key需要与占位字符一致 -->
        {{name}}
<!--    如果外面传进来列表,在这里也可以循环-->
    {% for k in name %}
<!--    如果循环出来的k是字典,可以用点key进行取值-->
        <td>{{k.name}}</td>
    {% endfor %}
</table>

</body>
</html>

渲染的页面
渲染的页面

 

django的安装和使用

安装

1.pip3安装:pip3 install django==1.11.10 -i https://pypi.tuna.tsinghua.edu.cn/simple 

2.pycharm安装

创建

1、命令行启动

  python3 manage.py runserver 127.0.0.1:8090

2.pycharm创建

目录介绍

mysite:
  settings.py : 用户自定义的各种配置
  urls.py : 路由文件
  wsgi.py : 启动socket服务端的 文件


mange.py: 管理文件 python mange.py 各种命令

创建django项目

1、首先要配置模板文件路径

  'DIRS': [os.path.join(BASE_DIR, 'templates')]

  pycharm创建的会帮我们自动配置好,命令行创建需要自己添加

2、然后配置静态资源的文件路径   js  css  img 

  STATIC_URL = '/static/'
  STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), (逗号不能少)
  )

3、然后注释中间件

  MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

注:前面三个的配置都是在配置文件settings中完成

4、最后开始写业务逻辑

  1.先写uri与函数的对应关系

    urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(r'^index/', index),
    ]

  2.写业务逻辑函数

    def fun(resquest):

      pass

转载于:https://www.cnblogs.com/jixu/p/11161229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值