Python学习笔记(3):web初步


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()


index.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>
    	Welcome:{{ name }}
    </body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值