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 wsgirefUsing cached https://files.pythonhosted.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zipComplete 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_setupFile "C:\Users\Venicid\AppData\Local\Temp\pip-build-f8zmzqr9\wsgiref\ez_setup\__init__.py", line 170print "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_serverdef application(environ,start_response):# 按着http协议解析数据:environ# 按着http协议组装数据:start_responseprint(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_serverdef application(environ,start_response):# 按着http协议解析数据:environ# 按着http协议组装数据:start_responseprint(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_serverdef login():with open('login.html', 'rb') as f:data = f.read()return datadef index():with open('index.html', 'rb') as f:data = f.read()return datadef favi():with open('favicon.ico', 'rb') as f:data = f.read()return datadef application(environ, start_response):# 按着http协议解析数据:environ# 按着http协议组装数据:start_responseprint(environ)print(type(environ))# 当前的请求路径path = environ.get('PATH_INFO')start_response('200 OK', [])url_patterns = [("/login",login),('/index',index),('/favicon.ico',favi)]func = Nonefor item in url_patterns:if path == item[0]:func = item[1]breakif func:return [func()]else:return [b'404']# 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_serverdef login(environ):with open('login.html', 'rb') as f:data = f.read()return datadef index(environ):with open('index.html', 'rb') as f:data = f.read()return datadef reg(environ):with open('reg.html', 'rb') as f:data = f.read()return datadef favi(environ):with open('favicon.ico', 'rb') as f:data = f.read()return datadef application(environ, start_response):# 按着http协议解析数据:environ# 按着http协议组装数据:start_responseprint(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 = Nonefor item in url_patterns:if path == item[0]:func = item[1]breakif func:return [func(environ)]else:return [b'404']# 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_serverdef application(environ, start_response):path = environ.get('PATH_INFO')start_response('200 OK', [])from urls import url_patterns # 导入路由表 func = Nonefor item in url_patterns:if path == item[0]:func = item[1]breakif func:result = func(environ) # 执行视图函数return [result]else:return [b'404']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 datadef index(environ):with open('./templates/index.html', 'rb') as f:data = f.read()return datadef reg(environ):with open('./templates/reg.html', 'rb') as f:data = f.read()return datadef fav(environ):with open('./templates/favicon.ico', 'rb') as f:data = f.read()return datadef timer(environ):import datetimenow_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 = 0request_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 pymysqlconn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='db61',charset='utf8')# 创建游标cursor = conn.cursor()# 执行sqlsql = "select * from userinfo where name='%s' and password='%s'" % (user, pwd)cursor.execute(sql)if cursor.fetchone(): # 执行成功,返回一条信息result = index(request) # 登录成功,进入index页面return resultelse:return 'Error username or passwrod'.encode('utf8')
5、总结