python web学习笔记一----基础的动静态网页
程序员文章站
2022-07-15 12:06:29
...
#创建一个网页,读取并return回去用于发送
#静态网页
def f1(reqeust):
f = open('demo1.html', 'rb')
data = f.read()
f.close()
return data
第一个html文件内容
#动态网页
def f3(request):
conn = pymysql.Connection(
host='127.0.0.1',
port=3306,
user='root',
passwd='root',
db='python_text',
charset='utf8'
)
#连接数据库,参数不同对应不同
cours = conn.cursor(cursor=pymysql.cursors.DictCursor)
cours.execute("select name,id,youxiang from user")
user_list = cours.fetchall()
#此时user_list里为数据库里的user表,类型为字典
cours.close()
conn.close()
conter_list = []
for row in user_list:
tp = "<tr><td>%s</td><td>%s</td><td>%s</td></tr>"%(row['name'],row['id'],row['youxiang'])
conter_list.append(tp)
conter = "".join(conter_list)
#把数据库里user表信息循环赋值并写成html语句用于下面替换html里的某部分内容
f = open('demo3.html', 'r',encoding='utf8')
data = f.read()
f.close()
data_end = data.replace("@aaa@qq.com",conter)
#这里的读取一定要r,如果是rb将无法进行替换(字节流无法进行str操作)恼火查了很久
print(data_end)
return bytes(data_end,'utf8')
#返回数据,编码为utf8
第二个html内容
def run():
sock = socket.socket()
sock.bind(('127.0.0.1', 8080))
sock.listen(5)
#创建socket对象,绑定服务与端口
while True:
conn, addr = sock.accept()
data = conn.recv(8096)
data = str(data, encoding='utf-8')
heard, body = data.split('\r\n\r\n')
tmpe_list = heard.split('\r\n')
tmpe_two, url, protocal = tmpe_list[0].split(' ')
conn.send(b'HTTP/1.1 200 OK \r\n\r\n')
#获取访问主机的的数据,进行分割
func_name1=None
for item in url_list:
if item[0] == url:
func_name1 = item[1]
break
if func_name1:
response = func_name1(data)
else:
response = b"404 NOT FOUND"
#将url列表循环,如果有用户访问的url地址,则调用对应函数
conn.send(response)
conn.close()
#发送给用户信息并关闭连接
结果如图
网页和数据库的数据
相关坑点说明,第一个:读取html的方式是rb,所以返回时不需要转换为byte类型,如果返回的数据类型不是字节(byte)需要进行转换 例如b’404 NOT found’
第二个 如果读取方式为rb,下面对文件的任何操作都会出现问题,将html转为str再进行替换操作,不会异常,但是连接网页的时候会出现无法识别问题
上一篇: Android之Service探索(一)