Django【一】web框架的本质

Django-web框架的本质 

HTTP协议

所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求,服务端按照http协议的响应协议来响应请求,这样的网络通信,我们就可以自己实现Web框架了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="css.css">
    <link rel="icon" href="favicon.ico">
</head>
<body>
<h1>欢迎来到红浪漫,拖鞋手牌请拿好,楼上请,男宾三位</h1>
<img src="tupian.jpg" alt="">
</body>
<script src="js.js"></script>
</html>

html代码
html代码
h1{
    background-color: red;
    color: white;
}
css代码
alert("楼下说滴对");
js代码

要想将服务器的html代码放在浏览器上,我们必须遵循http协议:

 HTTP协议

get的请求数据拼接在url中;

post的请求数据在请求体中;

 

web框架初识

每引入一个css或js或图片都需要向服务器请求一次拿到文件:

img js css 统称为静态文件

D:\python3\python.exe D:/PycharmProjects/s20/Django/day01/一框架.py
GET / HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9


GET /css.css HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: http://127.0.0.1:9000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9


GET /tupian.jpg HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://127.0.0.1:9000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

GET /js.js HTTP/1.1
Host: 127.0.0.1:9000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Accept: */*
Referer: http://127.0.0.1:9000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

客户端向浏览器发送的请求文件
客户端向浏览器发送的请求文件

框架演示:

# -*- coding: utf-8 -*-
# @Time    : 2019/5/15 15:18
import re
import socket
from threading import Thread
sk = socket.socket()
sk.bind(("127.0.0.1",9000))
sk.listen()

def send_file(conn):
    msg = conn.recv(1024).decode('utf-8')
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    t = re.findall(".*? (/.*?) HTTP/1.1",msg)
    # print(t)    # 获取客户端请求的文件

    if t[0]=="/":   # GET / HTTP/1.1
        with open("html.html", "rb") as f:
            countent_html = f.read()
        conn.send(countent_html)
        conn.close()

    elif t[0]=="/css.css":  # GET /css.css HTTP/1.1
        with open("css.css", "rb") as f:
            countent_css = f.read()
        conn.send(countent_css)
        conn.close()

    elif t[0]=="/tupian.jpg":  # GET /tupian.jpg HTTP/1.1
        with open("tupian.jpg", "rb") as f:
            countent_jpg = f.read()
        conn.send(countent_jpg)
        conn.close()

    elif t[0]=="/js.js":   # GET /js.js HTTP/1.1
        with open("js.js", "rb") as f:
            countent_js = f.read()
        conn.send(countent_js)
        conn.close()

while True:
    conn,addr = sk.accept()
    # 开启多线程
    t = Thread(target=send_file,args=(conn,))
    t.start()
sk.close()

web框架二
web框架二
# -*- coding: utf-8 -*-
# @Time    : 2019/5/15 15:18
import re
import socket
from threading import Thread
sk = socket.socket()
sk.bind(("127.0.0.1",9000))
sk.listen()

def html(conn):
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    with open("html.html", "rb") as f:
        countent_html = f.read()
    conn.send(countent_html)
    conn.close()

def css(conn):
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    with open("css.css", "rb") as f:
        countent_css = f.read()
    conn.send(countent_css)
    conn.close()

def js(conn):
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    with open("js.js", "rb") as f:
        countent_js = f.read()
    conn.send(countent_js)
    conn.close()

def tupian(conn):
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    with open("tupian.jpg", "rb") as f:
        countent_jpg = f.read()
    conn.send(countent_jpg)
    conn.close()

def img(conn):
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    with open("favicon.ico", "rb") as f:
        countent_ico = f.read()
    conn.send(countent_ico)
    conn.close()
file = [
    ("/",html),
    ("/css.css",css),
    ("/js.js",js),
    ("/tupian.jpg",tupian),
    ("/favicon.ico",img),
]
def send_file(conn,path):
    for i in file:
        if i[0]==path:
            Thread(target=i[1],args=(conn,)).start()

while True:
    conn,addr = sk.accept()
    msg = conn.recv(1024).decode("utf-8")
    t = re.findall(".*? (/.*?) HTTP/1.1", msg)
    send_file(conn,t[0])

web框架三
web框架三
# -*- coding: utf-8 -*-
# @Time    : 2019/5/16 16:56

"""
wsgiref模块版web框架
"""

from wsgiref.simple_server import make_server

def index(environ):
    with open("index.html","rb") as f:
        content = f.read()
    return [content]

def home(environ):
    with open("home.html","rb") as f:
        content = f.read()
    return [content]
def log(environ):
    with open("favicon.ico","rb") as f:
        content = f.read()
    return [content]

li = [
    ("/",index),
    ("/home",home),
    ("favicon.ico",log),
]
def app(environ, start_response):
    # 封装响应信息
    start_response('200 OK', [('Content-Type', 'text/html'), ('k1', 'v1')])
    # environ 封装好的请求数据,字典的格式
    path = environ["PATH_INFO"]
    print(path)
    for i in li:
        if i[0] == path:
            ret = i[1](environ)
            return ret

# 绑定ip和端口,有人连接就调用app函数
httpp = make_server("127.0.0.1",9000,app)
# 开始监听http请求
httpp.serve_forever()

web框架四
web框架四

转载于:https://www.cnblogs.com/youxiu123/p/11494620.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DjangoWeb框架是指使用Django框架来进行Web开发的应用程序。DjangoWeb框架提供了一系列的工具和库,以帮助开发者更加高效、可靠地构建Web应用程序。使用DjangoWeb框架,开发者可以通过简单的配置和编写Python代码来完成许多Web应用程序所需的功能,如数据库管理、用户认证、表单处理等。DjangoWeb框架还提供了许多第三方库和插件,使得开发者可以扩展框架的功能,以满足特定的需求。 ### 回答2: Django是一个开放源码的Web框架,基于Python语言开发。它快速、高效地构建了一个强大的Web应用程序。 Django具有许多强大的特性和优势。首先,它提供了一个高度模块化的结构,使得开发人员可以更容易地组织和管理自己的项目代码。其次,Django提供了许多内置的功能和工具,例如身份验证、表单处理、数据库操作等,大大简化了Web开发过程。此外,Django还提供了ORM(对象关系映射)机制,使得我们可以使用Python代码来操作数据库,而不需要编写复杂的SQL语句。 Django还具有良好的扩展性和灵活性。它支持许多第三方插件和库,可以轻松集成其他功能,如社交媒体登录、支付接口等。此外,Django还提供了一个易于使用的管理面板,使得我们可以快速地管理和维护我们的Web应用程序。 在性能方面,Django也表现出色。它采用了一些优化措施,如缓存机制、数据库查询优化等,以确保应用程序的高性能和响应速度。 总的来说,Django是一个功能强大、易于使用和高性能的Web框架。它具有良好的扩展性和灵活性,使得开发人员能够更快速、更高效地构建和维护Web应用程序。通过使用Django,我们可以更高效地实现自己的想法和项目需求。 ### 回答3: DjangoWeb框架是一个开源的Python Web框架,旨在帮助开发者快速构建高效、安全和可扩展的Web应用程序。 首先,Django使用了一种名为MTV(模型-模板-视图)的设计模式,这使得应用程序的不同组件分离开,易于维护和测试。模型用于定义数据模型和数据库表结构,模板用于定义展示给用户的界面,而视图则负责处理用户请求、数据处理和业务逻辑等。 其次,Django提供了丰富的内置功能和插件,使开发过程更加高效。例如,Django自动处理表单验证和用户身份认证,提供了一个强大的数据库访问层,支持多种数据库后端,还提供了详尽的文档和社区支持。 另外,Django框架还强调安全性和可扩展性。它内置了一些安全特性,如防止跨站脚本攻击(XSS)、SQL注入和跨站请求伪造(CSRF)等。此外,Django还支持多语言和时区的应用程序,可以根据用户的语言和地区提供不同的内容。 最后,Django具有广泛的应用领域。它适用于各种规模的项目,从小型网站到大型Web应用程序,甚至还可以用于构建RESTful API。Django还可以与其他前端框架(如React、Vue.js)进行集成,以实现更丰富的用户界面。 总结起来,DjangoWeb框架是一个功能强大、易于使用和高度可定制的Python框架,它提供了许多有用的功能和工具,帮助开发者快速构建安全、高效和可扩展的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值