day55

吴超老师Django总网页:https://www.cnblogs.com/clschao/articles/10526431.html

请求(网址访问,提交数据等等) request

响应(回复页面,回复数据等等) response

web框架的本质及自定义web框架

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

  通过对socket的学习,我们知道网络通信,我们完全可以自己写了,因为socket就是做网络通信用的,下面我们就基于socket来自己实现一个web框架,写一个web服务端,让浏览器来请求,并通过自己的服务端把页面返回给浏览器,浏览器渲染出我们想要的效果。在后面的学习中,****大家提前准备一些文件:

    html文件内容如下,名称为test.html:  

详情看:https://www.cnblogs.com/clschao/articles/10391859.html#part_2

简单版回复html页面的web框架

python代码

server.py

import socket

server = socket.socket()
server.bind(('127.0.0.1', 8001))
server.listen() while 1:
conn,addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
if path == '/':
with open('05dong.html', 'rb')as f:
data = f.read()
elif path == '/style.css':
with open('style.css', 'rb') as f:
data = f.read() elif path == '/test.js':
with open('test.js', 'rb') as f:
data = f.read() elif path == '/1.jpg':
with open('1.jpg', 'rb') as f:
data = f.read() conn.send(data)
conn.close()
html代码

04test.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="style.css">
<!-- <link rel="icon" href="favicon.ico">--> </head>
<body>
<h1>24期官网</h1>
<div>
<img src="1.jpg" alt="">
</div>
</body> <script src="test.js"></script> </html>
样式和js等文件

style.css

body{
background: red;
}

test.js

alert(123);

图片文件--1.jpg

基础函数版

python代码

server.html

import socket
from threading import Thread server = socket.socket()
server.bind(('127.0.0.1',8003))
server.listen() def home(conn):
with open('04test.html', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def css(conn):
with open('style.css', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def js(conn):
with open('test.js', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def pic(conn):
with open('1.jpg', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def nofount(conn):
conn.send(b'not found 404!')
conn.close() def ico(conn):
with open('favicon.ico', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() urlpatterns = [
('/',home),
('/style.css',css),
('/test.js',js),
('/1.jpg',pic),
('/favicon.ico',ico),
] while 1:
conn,addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
for url in urlpatterns:
if path == url[0]:
# ret = url[1]()
t = Thread(target=url[1],args=(conn,))
t.start()
break
else:
t = Thread(target=nofount,args=(conn,))
t.start()
html代码

04test.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="favicon.ico">
</head>
<body>
<div>
<img src="1.jpg" alt="">
</div>
<script src="test.js"></script>
</body>
</html>
样式和js等文件

style.css

body{
background: red;
}

test.js

alert(123);

图片文件--1.jpg

进阶函数版

python文件

server.py

import socket
from urls import urlpatterns
from threading import Thread
import views server = socket.socket()
server.bind(('127.0.0.1',8003))
server.listen() while 1:
conn,addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
for url in urlpatterns:
if path == url[0]:
t = Thread(target=url[1], args=(conn,))
t.start()
break
else:
t = Thread(target=views.nofount, args=(conn,))
t.start()

列表文件--urls.py

import views
urlpatterns = [
('/',views.home),
('/style.css',views.css),
('/test.js',views.js),
('/1.jpg',views.pic),
('/favicon.ico',views.ico),
]

函数文件--views.py


def home(conn):
with open('05dong.html', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def css(conn):
with open('style.css', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def js(conn):
with open('test.js', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def pic(conn):
with open('1.jpg', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def nofount(conn):
conn.send(b'not found 404!')
conn.close() def ico(conn):
with open('favicon.ico', 'rb') as f:
data = f.read()
conn.send(data)
conn.close()
html文件

05dong.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="style.css">
<!-- <link rel="icon" href="favicon.ico">--> </head>
<body>
<h1>24期官网</h1>
<div>
<img src="1.jpg" alt="">
</div>
</body> <script src="test.js"></script> </html>
样式和js等文件

style.css

body{
background: red;
}

test.js

alert(123);

图片文件--1.jpg

动态页面的web框架

python文件

server.py

import socket

server = socket.socket()
server.bind(('127.0.0.1', 8003))
server.listen() while 1:
username = "朱凡宇"
conn, addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(" ")[1]
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
with open('dong.html', 'r', encoding='utf-8')as f:
data = f.read()
data = data.replace('%xxoo%', username)
conn.send(data.encode())
conn.close()
html文件

dong.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎来到%xxoo%的首页</h1>
</body>
</html>

不同html页面的web框架

python文件

server

import socket
from urls import urlpatterns
from threading import Thread
import views server = socket.socket()
server.bind(('127.0.0.1',8003))
server.listen() while 1:
conn,addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
for url in urlpatterns:
if path == url[0]:
t = Thread(target=url[1], args=(conn,))
t.start()
break else:
t = Thread(target=views.nofount, args=(conn,))
t.start()

urls

import views

urlpatterns = [
('/',views.home),
('/center',views.person_center),
]

views

def home(conn):
with open('05dong.html', 'rb') as f:
data = f.read()
conn.send(data)
conn.close() def person_center(conn):
with open('center.html', 'rb') as f:
data = f.read() conn.send(data) conn.close() def nofount(conn):
conn.send(b'not found 404!') conn.close()
html文件

05dong.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎24期来到xx网站</h1>
<a href="/center">个人中心</a>
</body>
</html>

center.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎来到xx个人中心</h1>
</body>
</html>

wsgiref模块

python文件

server

from wsgiref.simple_server import make_server
from urls import urlpatterns def application(environ,start_response):
# environ 所有请求相关信息
# start_response --封装响应数据格式
path = environ['PATH_INFO']
start_response('200 ok',[]) # conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
for url in urlpatterns:
if path == url[0]:
ret = url[1]()
break
return [ret] if __name__ == '__main__':
h = make_server('127.0.0.1', 8080, application)
h.serve_forever()

urls

import views
urlpatterns = [
('/',views.home),
]

views

def home():
with open('05dong.html', 'rb') as f:
data = f.read()
return data
html文件

05dong.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎24期来到xx网站</h1>
</body>
</html>

jinja2模块

python文件

server

import socket
from urls import urlpatterns
from threading import Thread
import views server = socket.socket()
server.bind(('127.0.0.1',8003))
server.listen() while 1:
conn,addr = server.accept()
from_brower_msg = conn.recv(1024)
path = from_brower_msg.decode('utf-8').split(' ')[1]
print(path)
conn.send(b'HTTP/1.1 200 ok\r\n\r\n')
for url in urlpatterns:
if path == url[0]:
t = Thread(target=url[1], args=(conn,))
t.start()
break

urls

import views
urlpatterns = [
('/',views.home),
# ('/center',views.person_center),
# ('/style.css',views.css),
# ('/test.js',views.js),
# ('/1.jpg',views.pic),
# ('/favicon.ico',views.ico),
]

views

from jinja2 import Template

def home(conn):
# {% for i in hobby %}
# <li>{{ i }}</li>
# {% endfor %} with open('08jinja2test.html', 'r',encoding='utf-8') as f:
data = f.read()
t = Template(data)
ret = t.render({'hobby':['金钱','女人','张达'], 'name': '朱凡宇'})
conn.send(ret.encode('utf-8'))
conn.close()
html文件

08jinja2test.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ name }}个人介绍</h1>
我的爱好
<ul>
{% for i in hobby %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>
</html>

day55——django引入、小型django(socket包装的服务器)的更多相关文章

  1. teprunner测试平台Django引入pytest完整源码

    本文开发内容 pytest登场!本文将在Django中引入pytest,原理是先执行tep startproject命令创建pytest项目文件,然后从数据库中拉取代码写入文件,最后调用pytest命 ...

  2. django引入现有数据库 转

    django引入现有数据库   Django引入外部数据库还是比较方便的,步骤如下: 1.创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新 ...

  3. django引入现有数据库

    Django引入外部数据库还是比较方便的,步骤如下: 1.创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致. 2.运行下面代 ...

  4. Django(一):从socket到MVC

    一.socket的http套路 web应用本质上是一个socket服务端,用户的浏览器是一个socket客户端.socket处在应用层与传输层之间,是操作系统中I/O系统的延伸部分(接口),负责系统进 ...

  5. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  6. Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...

  7. Django组件(五) Django之ContentType组件

    基础使用 -contenttype组件 -django提供的一个快速连表操作的组件,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中. 当我们的项目做数据迁移后,会 ...

  8. 使用Nginx+uWSGI+Django方法部署Django程序

    第一步先解决uwsgi与django的桥接.解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器. 第二步解决uwsgi与Nginx的桥接.通过nginx与uws ...

  9. Django框架(一)-Django初识

    Django初识 一.Web框架本质—自己实现Web框架 1.所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端 import socket sk = sock ...

随机推荐

  1. 洛谷P1084 疫情控制

    题目 细节比较多的二分+跟LCA倍增差不多的思想 首先有这样一个贪心思路,深度越低的检查点越好,而最长时间和深度具有单调性,即给定时间越长,每个军队能向更浅的地方放置检查点.因此可以考虑二分时间,然后 ...

  2. java 中类初始化,构造方法,静态成员变量,静态块的加载顺序

    1.编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型.格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内 ...

  3. 【POJ2676】Sudoku

    本题传送门 本题知识点:深度优先搜索 + 回溯 问题就是要让我们解决一个数独问题.如果你懂得怎么玩数独的话,那就很自然想到用暴力搜索去做题.(比如我就不会,所以先WA了一发quq) 数独符合三个条件 ...

  4. planning algorithms chapter 3

    chapter 3 几何表示和变换 P.S: 总算到了 motion planning 部分了 几何建模 几何建模主要有两类方法:边界表示法和实体表示法. 环境模型可以是二维或三维,实体主要包括障碍物 ...

  5. lintcode-828. 字模式

    题目描述: 828.字模式 给定一个模式和一个字符串str,查找str是否遵循相同的模式.这里遵循的意思是一个完整的匹配,在一个字母的模式和一个非空的单词str之间有一个双向连接的模式对应. 样例 给 ...

  6. quick player运行分析

    mac应用从AppController.mm源文件的applicationDidFinishLaunching函数启动: . - (void)applicationDidFinishLaunching ...

  7. 冰多多团队-第六次Scrum会议

    冰多多团队-第六次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj ASR bug修复 接入IAT模块 牛雅哲 完成语音识别->词典->termux的接口设计,熟悉了语法 ...

  8. asp.net core 托管到windows服务,并用iis做反向代理

    使用NSSM把.Net Core部署至 Windows 服务   为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.n ...

  9. 移除 WordPress 自动加载的 jQuery,使用自定义 jQuery 版本

    WordPress 使用的 jQuery 版本由于需要考虑到很多安全稳定的因素,所以一般不会使用最新版本的 jQuery, 可以通过以下方式移除 WordPress 自定加载的 jQuery,并加载自 ...

  10. DSCP 标

    DSCP差分服务代码点(Differentiated Services Code Point).它在每个数据包IP头部的服务类别TOS标识字节中,利用已使用的6比特和未使用的2比特,通过编码值来区分优 ...