• Web框架


    Web框架本质

    我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。

    自定义web框架

    import socket


    #生成socke实例对象
    sk = socket.socket()

    #绑定IP和端口
    sk.bind(("127.0.0.1",8001))

    #监听
    sk.listen()

    #死循环,等待用户链接
    while 1:
    #获取客户端链接
    conn, addr =sk.accept() #系统没有用的变量以_保存
    #接受客户端发来的消息
    data = conn.recv(8096)
    print(data)


    #回复
    conn.send(b'qnmd')
    #关闭
    conn.close()
    sk.close()

    HTTP协议主要规定了客户端和服务器之间的通信格式,那HTTP协议是怎么规定消息格式的呢?

    让我们首先打印下我们在服务端接收到的消息是什么,浏览器和服务端通信都必须遵循一个HTTP协议(消息的格式要求)

    import socket


    #生成socke实例对象
    sk = socket.socket()

    #绑定IP和端口
    sk.bind(("127.0.0.1",8001))

    #监听
    sk.listen()

    #死循环,等待用户链接
    while 1:
    #获取客户端链接
    conn, addr =sk.accept() #系统没有用的变量以_保存
    #接受客户端发来的消息
    data = conn.recv(8096)
    print(data)# 将浏览器发来的消息打印出来


    #回复
    conn.send(b'qnmd')
    #关闭
    conn.close()
    sk.close()
    输出

    'GET / HTTP/1.1 《---请求行

    Host: 127.0.0.1:8001 《--请求头部onnection: keep-alive

    Upgrade-Insecure-Requests: 1

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

    Accept-Encoding: gzip, deflate, br

    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

    ' 《--没有请求数据

    关于HTTP协议:
    a 浏览器往服务端发送的为请求(request)
    请求的消息格式:
            请求方法: 路径 HTTP/1.1
            k1:v1
            k2:v2
            请求数据:
    b 服务端往浏览器发送的为响应(response)
        响应的消息格式:
            HTTP:/1.1 状态码 状态描述符
            k1:v1
            k2:v2
            
            响应正文
    动态的网页:
        本质上都是字符串的替换
        字符串替换发生在什么地方:
        在服务端替换完在返回给浏览器
    web框架的本质:
        socket服务端与浏览器的通信
        socket服务端和功能划分
          a 负责与浏览器收发消息(socket)
          b 根据用户访问不同的路径执行不同的函数
          c 从HTML读取出内容,并且完成字符串的替换

    Django

    Django官网下载页面

    安装(安装最新LTS版):

    pip3 install django==1.11.9

    创建一个django项目:

    下面的命令创建了一个名为"mysite"的Django 项目:

    django-admin startproject mysite
        

    目录介绍:

     
    mysite/
    ├── manage.py  # 管理文件
    └── mysite  # 项目目录
        ├── __init__.py
        ├── settings.py  # 配置
        ├── urls.py  # 路由 --> URL和函数的对应关系
        └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server
     

    运行Django项目:

    python manage.py runserver 127.0.0.1:8000

    模板文件配置:

     
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夹位置
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
     

    静态文件配置:

    STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
    ]



  • 相关阅读:
    js四舍五入
    文本框只能输入整数,输入其他的自动不显示
    [转]关于C#程序部署到Android
    ajax在火狐中传中文出现乱码的解决方法
    Vue 记录 Cannot read property '_withTask' of undefined
    vs中 VMDebugger未能加载导致异常
    System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
    eclipse中将java项目转换成javaweb项目
    Android之SOAP协议与WebService服务器交互,解决超时的问题
    SymmetricDS 快速和灵活的数据库复制
  • 原文地址:https://www.cnblogs.com/sseban/p/10310683.html
Copyright © 2020-2023  润新知