02-web框架
1
while True:
print('server is waiting...')
conn, addr = server.accept()
data = conn.recv(1024)
print('data:', data)
# 1.得到请求的url路径
# ------------dict/obj d=["path":"/login"]
# d.get(”path“) # 按着http请求协议解析数据 # 专注于web业务开发
path = d.get('path') if path == "/login":
return login.html # 按着http响应协议封装数据
2
# 报错信息
C:\Windows\system32>pip install wsgiref
Collecting wsgiref
Using cached https://files.pythonhosted.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\Venicid\AppData\Local\Temp\pip-build-f8zmzqr9\wsgiref\setup.py", line 5, in <module>
import ez_setup
File "C:\Users\Venicid\AppData\Local\Temp\pip-build-f8zmzqr9\wsgiref\ez_setup\__init__.py", line 170
print "Setuptools version",version,"or greater has been installed."
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Setuptools version",version,"or greater has been installed.")? ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Venicid\AppData\Local\Temp\pip-build-f8zmzqr9\wsgiref\
# wsgiref 是标准库,不需要安装 C:\Windows\system32>python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC
>>> import wsgiref
from wsgiref.simple_server import make_server def application(environ,start_response):
# 按着http协议解析数据:environ
# 按着http协议组装数据:start_response
print(environ)
print(type(environ)) start_response('200 OK', []) return [b"<h3>hello wsgiref</h3>"] # 1.封装socket
httpd = make_server("",8802,application) # 2.等待用户连接: conn,addr = server.accept()
httpd.serve_forever() # application(environ,start_response)



根据path进行响应不同的html
方案1:
from wsgiref.simple_server import make_server def application(environ,start_response):
# 按着http协议解析数据:environ
# 按着http协议组装数据:start_response
print(environ)
print(type(environ)) # 当前的请求路径
path = environ.get('PATH_INFO')
print(path)
start_response('200 OK', [])
if path == "/login":
with open('login.html','r') as f:
data = f.read()
elif path == '/index':
with open('index.html','r') as f:
data = f.read()
elif path == '/favicon.ico': # icon图标
with open('favicon.ico','rb') as f:
data = f.read()
return [data]
return [data.encode('utf8')] # 1.封装socket
httpd = make_server("",8802,application) # 2.等待用户连接: conn,addr = server.accept()
httpd.serve_forever() # application(environ,start_response)
方案2:解耦
from wsgiref.simple_server import make_server def login():
with open('login.html', 'rb') as f:
data = f.read()
return data def index():
with open('index.html', 'rb') as f:
data = f.read()
return data def favi():
with open('favicon.ico', 'rb') as f:
data = f.read()
return data def application(environ, start_response):
# 按着http协议解析数据:environ
# 按着http协议组装数据:start_response
print(environ)
print(type(environ)) # 当前的请求路径
path = environ.get('PATH_INFO')
start_response('200 OK', []) url_patterns = [
("/login",login),
('/index',index),
('/favicon.ico',favi)
] func = None
for item in url_patterns:
if path == item[0]:
func = item[1]
break
if func:
return [func()]
else:
return [b''] # 1.封装socket
httpd = make_server("", 8805, application) # 2.等待用户连接: conn,addr = server.accept()
httpd.serve_forever() # application(environ,start_response)
添加新的reg模块:快速方便








添加请求environ
from wsgiref.simple_server import make_server def login(environ):
with open('login.html', 'rb') as f:
data = f.read()
return data def index(environ):
with open('index.html', 'rb') as f:
data = f.read()
return data def reg(environ):
with open('reg.html', 'rb') as f:
data = f.read()
return data def favi(environ):
with open('favicon.ico', 'rb') as f:
data = f.read()
return data def application(environ, start_response):
# 按着http协议解析数据:environ
# 按着http协议组装数据:start_response
print(environ)
print(type(environ)) # 当前的请求路径
path = environ.get('PATH_INFO')
start_response('200 OK', []) url_patterns = [
("/login",login),
('/index',index),
('/favicon.ico',favi),
('/reg',reg)
] func = None
for item in url_patterns:
if path == item[0]:
func = item[1]
break
if func:
return [func(environ)]
else:
return [b''] # 1.封装socket
httpd = make_server("", 8805, application) # 2.等待用户连接: conn,addr = server.accept()
httpd.serve_forever() # application(environ,start_response)
3、yun框架

main.py 启动程序
from wsgiref.simple_server import make_server def application(environ, start_response):
path = environ.get('PATH_INFO')
start_response('200 OK', []) from urls import url_patterns # 导入路由表 func = None
for item in url_patterns:
if path == item[0]:
func = item[1]
break
if func:
result = func(environ) # 执行视图函数
return [result] else:
return [b''] print('start yun框架...') # 1.封装socket
httpd = make_server("", 8806, application) # 2.等待用户连接: conn,addr = server.accept()
httpd.serve_forever() # application(environ,start_response)
urls.py路由分发
from views import * url_patterns = [
("/login", login), # 视图函数
('/index', index),
('/favicon.ico', fav),
('/reg', reg),
('/timer', timer)
]
views.py 视图函数
def login(environ):
with open('./templates/login.html', 'rb') as f:
data = f.read()
return data def index(environ):
with open('./templates/index.html', 'rb') as f:
data = f.read()
return data def reg(environ):
with open('./templates/reg.html', 'rb') as f:
data = f.read()
return data def fav(environ):
with open('./templates/favicon.ico', 'rb') as f:
data = f.read()
return data def timer(environ):
import datetime
now_time = datetime.datetime.now().strftime('%y-%m-%d %X')
return now_time.encode('utf8') # bytes类型
4、

新建 models.py 数据交换py文件
# 数据库交互文件 # 生成用户表
import pymysql # 连接数据库
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
db='db61',
charset='utf8'
) # 获取游标
cursor = conn.cursor() # 执行sql语句
sql = """
create table userinfo(
id int primary key,
name varchar(32),
password varchar(32)
)
"""
cursor.execute(sql) # 提交
conn.commit() # 关闭
cursor.close()
conn.close()



插入一个username password



views.py中的auth函数
def auth(request):
from urllib.parse import parse_qs # 分割取参数
try:
request_body_size = int(request.get('CONTENT_LENGTH',0))
except (ValueError):
request_body_size = 0 request_body = request['wsgi.input'].read(request_body_size)
data = parse_qs(request_body) user = data.get(b'username')[0].decode('utf8')
pwd = data.get(b'password')[0].decode('utf8') # 连接数据库
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='root',
db='db61',
charset='utf8'
)
# 创建游标
cursor = conn.cursor() # 执行sql
sql = "select * from userinfo where name='%s' and password='%s'" % (user, pwd)
cursor.execute(sql) if cursor.fetchone(): # 执行成功,返回一条信息
result = index(request) # 登录成功,进入index页面
return result
else:
return 'Error username or passwrod'.encode('utf8')



5、总结


02-web框架的更多相关文章
- 02 初级版web框架
02 初级版web框架 服务器server端python程序(初级版): import socket server=socket.socket() server.bind(("127.0.0 ...
- node.js之十大Web框架
之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node. ...
- 第六模块:WEB框架开发 第1章·Django框架开发1~50
01-Django基础介绍 02-Web应用程序1 03-Web应用程序2 04-http请求协议1 05-http请求协议2 06-http协议之响应协议 07-wsgire模块1 08-wsgir ...
- Smart Framework:轻量级 Java Web 框架
Smart Framework:轻量级 Java Web 框架 收藏 黄勇 工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...
- Python-S9-Day115——Flask Web框架基础
01 今日内容概要 02 内容回顾 03 Flask框架:配置文件导入原理 04 Flask框架:配置文件使用 05 Flask框架:路由系统 06 Flask框架:请求和响应相关 07 示例:学生管 ...
- 使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的 ...
- web框架之初识Django
目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...
- python 异步Web框架sanic
我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似 ...
- 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00
在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...
- 支持JDK19虚拟线程的web框架,之一:体验
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于虚拟线程 随着JDK19 GA版本的发布,虚拟线程 ...
随机推荐
- Oracle EBS AR 更新客户配置文件
DECLARE l_rec_profile_t hz_customer_profile_v2pub.customer_profile_rec_type; l_rec_profile hz_custom ...
- Oracle EBS AR 更新客户组织层
declare -- Local variables here i integer; g_module ) := 'TCA_V2_API'; lrec_org hz_party_v2pub.organ ...
- [控件] CircleView
CircleView 效果图: 源码: // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/2/17. // Cop ...
- OC实用转换model的工具
OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点 ...
- django中的字段类型
from http://www.cnblogs.com/lhj588/archive/2012/05/24/2516040.html Django 通过 models 实现数据库的创建.修改.删除等操 ...
- 阿里云全球首次互联网8K直播背后的技术解读
3月28日,云栖大会·深圳峰会现场,阿里云发布并现场演示了阿里视频云最新8K互联网直播解决方案.这是全球发布的首个8K视频云解决方案,也是全球首次8K互联网视频直播. 视频地址:https://v.q ...
- Error creating bean with name xxxx,xxxx must be provided
原因: 继承父类的bean注入是set,get方法 问题: 自己的controller不能创建,因为需要的bean没有创建 解决方法: bean 注入,通过构造函数调用父类的set方法
- RAC数据库的RMAN备份异机恢复到单节点数据库
1.首先在rac环境用rman备份数据库.[oracle@rac1 admin]$ rman target /run{allocate channel c1 device type disk conn ...
- November 14th 2016 Week 47th Monday
There are far, far better things ahead than any we leave behind. 前方,有更美好的未来. Can I see those better ...
- CPU中MMU的作用
http://blog.csdn.net/jjw97_5/article/details/39340261 MMU是个硬件,每当cpu访问一个地址的时候,MMU从内存里面查table,把cpu想访问的 ...