1、使用Python web可以快速构建一个网站,相对于Javaweb或者PHP,代码量减少了很多。使用Pythonweb需要提前下载tornado模块,方法很多,能正常使用即可
2、构建会话服务器:基本就是TCP链接,具体内部如何实现,不清楚,相对于c++的socket编程,确实减少了很多需要声明的东西。但微软的那一套socket编程学的很蛋疼,过于接近硬件了,所以能学会的几乎也比常人更多一些。
下面是服务端:
import socket
comms_socket=socket.socket()
comms_socket.bind(('localhost',50000))
comms_socket.listen(10)
connection,address=comms_socket.accept()
while True:
print(connection.recv(4096).decode("UTF-8"))
send_data=input("Reply:")
connection.send(bytes(send_data,"UTF-8"))
下面是客户端:
import socket
comms_socket=socket.socket()
comms_socket.connect(('localhost',50000))
while True:
send_data=input("send: ")
comms_socket.send(bytes(send_data,"UTF-8"))
print(comms_socket.recv(4096).decode("UTF-8"))
3、获取网页信息
需要注意的是,下面是针对Python3而言
import urllib.request, json
import http.server, os
try:
url="http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0"
req=urllib.request.Request(url)
forecast_string= urllib.request.urlopen(req).read()
forecast_dict=json.loads(forecast_string.decode("UTF-8"))
print(forecast_dict)
except Exception:
raise
else:
pass
finally:
pass
如果需要转换为json,如下
先用Python构建一个最简单的网站,返回一个json数据
import tornado.ioloop
import tornado.web
import json
data={'name':'doubleevil'}
data_json=json.dumps(data)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write(data_json)
if __name__=="__main__":
application=tornado.web.Application([(r"/",MainHandler),],)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
下一步,直接获取信息
import urllib.request
import json
url="http://127.0.0.1:8888"
req=urllib.request.Request(url)
result_string=urllib.request.urlopen(req).read()
result_dict=json.loads(result_string.decode("UTF-8"))
print(result_dict["name"])
结果为doubleevil
4、网站
(1)最简单的网站,只有helloworld
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("<html>helloworld"+"</html>")
if __name__=="__main__":
application=tornado.web.Application([(r"/",MainHandler),],)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
(2)改进版
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("<html>hello,index+"+"</html>")
class HelloHandler(tornado.web.RequestHandler):
def get(self):
self.render("/Users/shangguyi/Desktop/user-info.html")
def post(self):
self.render("index.html",name=self.get_argument("name"))
if __name__=="__main__":
application=tornado.web.Application([(r"/",MainHandler),(r"/hello/",HelloHandler)],)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
user-info.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="/hello/" method="post">
enter your name:<input type="text" name="name">
<input type="submit" value="Sign in">
</form>
</body>
</html>
(3)类似SpringMVC
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self,name_in):
self.name=name_in
self.render("/Users/shangguyi/Desktop/index.html",name=self.name)
if __name__=="__main__":
application=tornado.web.Application([(r"/(.*)",MainHandler),],)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
Welcome:{{ name }}
</body>
</html>