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框架的更多相关文章

  1. 02 初级版web框架

    02 初级版web框架 服务器server端python程序(初级版): import socket server=socket.socket() server.bind(("127.0.0 ...

  2. node.js之十大Web框架

    之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node. ...

  3. 第六模块: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 ...

  4. Smart Framework:轻量级 Java Web 框架

    Smart Framework:轻量级 Java Web 框架 收藏 黄勇   工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...

  5. Python-S9-Day115——Flask Web框架基础

    01 今日内容概要 02 内容回顾 03 Flask框架:配置文件导入原理 04 Flask框架:配置文件使用 05 Flask框架:路由系统 06 Flask框架:请求和响应相关 07 示例:学生管 ...

  6. 使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的 ...

  7. web框架之初识Django

    目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...

  8. python 异步Web框架sanic

    我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜flask不支持异步,而sanic就是类似 ...

  9. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

    在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...

  10. 支持JDK19虚拟线程的web框架,之一:体验

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于虚拟线程 随着JDK19 GA版本的发布,虚拟线程 ...

随机推荐

  1. SQLSERVER的 筛选索引(Fiter Index)

    fiter index(筛选索引)是SQL Server的一项功能,可使此数据库与众不同. 筛选索引的概念 SQL Server中常用的索引是一种物理结构,它包含来自所有行的一组选定列的值 在一张桌子 ...

  2. VUE入门准备------>ES6

    声明变量的方式:  var  let   const let  和 var的区别 var定义的变量是全局的会覆盖全局的定义 ; ;i<;i++){ console.log(i) } undefi ...

  3. 点击单个cell高度变化的动画效果

    点击单个cell高度变化的动画效果 效果 说明 1. 点击单个cell的时候,其展开与缩放动画实现起来是很麻烦的,做过相关需求的朋友一定知道其中的坑 2. 本例子只是提供了一个解决方案,为了简化操作, ...

  4. KHFlatButton

    KHFlatButton https://github.com/kylehorn/KHFlatButton 效果: 对于自己做demo来说,每次设置button就不用这么折腾了,几句话就行了,非常爽: ...

  5. 服务器安装LNMP及构建个人站点

    服务器安装LNMP(centos6.6+nginx1.7.12+mysql5.6.24+php5.6.7) 本次安装  centos6.6+nginx1.7.12+mysql5.6.24+php5.6 ...

  6. Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法

    Win7 或者Winserver 上安装新版的Mongo后,总是提示如上问题,可使用如下方法解决: 一是系统更新到SP1,并安装了KB2999226这个更新包(重要): 二是安装安装 Visual C ...

  7. Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  8. js实现svg图形转存为图片下载[转]

    我们知道canvas画布可以很方便的js原生支持转为图片格式并下载,但是svg矢量图形则并没有这方面原生的支持.研究过HighChart的svg图形的图片下载机制,其实现原理大体是浏览器端收集SVG代 ...

  9. 学习python第三天单行函数

    1.去重:distinct关键字 需求:查看公司一共有多少部门? select department_id from employees;此代码会查出107条记录,存在部门重复的问题! select ...

  10. [USACO08JAN]Running

    嘟嘟嘟 这很显然是一道dp题. 令dp[i][j]表示第 i 分钟末,疲劳度为 j 是的最大跑步距离,则 dp[i][0] = max(dp[i - 1][0], max(dp[i - j][j])) ...