做网站的python框架有很多,如 djangle,tornado,flask,webpy等。
python版本为(python2.7.9)
一、djangle,重型框架,功能系统全面,资料最多。
安装django
python -m pip install https://bitbucket.org/david/django-storages/get/def732408163.zip
python -m pip install Django
二、tornado,相对轻量web框架,支持高访问量。
1 . 主要类介绍
参考:http://www.360doc.com/content/14/0811/18/16044571_401100703.shtml
- BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。
- TCPServer/UDPServer:基本的网络同步TCP/UDP服务器。
- UnixStreamServer/ UnixDatagramServer:基本的基于文件同步TCP/UDP服务器。
- ForkingMixIn/ ThreadingMixIn:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。
- ForkingTCPServer/ ForkingUDPServer:ForkingMixIn和TCPServer/UDPServer的组合。
- BaseRequestHandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用StreamRequestHandler或DatagramRequestHandler。
- StreamRequestHandler/ DatagramRequestHandler:用于TCP/UDP服务器的服务处理工具。
2 . 几个web例子:
sample 1 hello:
import tornado.httpserver
import tornado.ioloop
def handle_request(request):
print ' recieved request form %s ' % request.uri
message = "your request is %s\n" % request.uri
request.write("HTTP/1.1 200 OK\r\n Content-Lenght:%d\r\n\r\n%s" % (len(message),message))
request.finish()
http_server = tornado.httpserver.HTTPServer(handle_request)
http_server.listen(8100)
tornado.ioloop.IOLoop.instance().start()
创建一个http_server, 对接处理函数为handle_request处理。
handle_reques处理请求,接受到request的时候,往回写一个 消息'recieved request from xxxx',然后接受请求。
sample2 hello,world
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8899, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', friendly user!')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/",IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
主函数创建一个应用程序实例app,当接收到"/"请求时,对应Indexhandler类处理请求。
创建一个httpserver类实例,并与app绑定。
然后开始循环监听。
3 sample 前后端
前台上传文件,后台调用python其它脚本
import tornado.ioloop
import tornado.web
import pic_imp2
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html')
class UploadHandler(tornado.web.RequestHandler):
def post(self):
if self.request.files:
myfile = self.request.files['myfile'][0]
fin = open("tmp.zip","w")
print "success to open file"
fin.write(myfile["body"])
fin.close()
message = "document is recieved"
self.write("HTTP/1.1 200 OK\r\n Content-Length:%d \r\n\r\n%s" %(len(message),message))
pic_imp2.start('{"user_id":"duke","params":{"file":"tmp.zip"}}')
message = "process is done!"
self.write("HTTP/1.1 200 OK\r\n Content-Length:%d \r\n\r\n%s" %(len(message),message))
print "process over"
application=tornado.web.Application([(r'/',MainHandler),(r'/upload', UploadHandler) ]
)
if __name__=='__main__':
application.listen(8800)
tornado.ioloop.IOLoop.instance().start()
创建一个tornado web应用程序application,请求相对地址为/的时候由类MainHandler处理,请求相对地址为upload时 由类 UploadHandler处理。
程序主函数:application 监听8800端口(对应请求为 http://127.0.0.1:8800),然后运行后台。
MainHandler,一个继承自tornado.web.RequestHandler的类
定义get方法,当收到get请求时,向客户端返回一个html页面 index.html
UploadHandler,一个继承自tornado.webRequestHandler的类
定义post方法,当服务器接受到来自客户端的upload请求时,做一系列事情:
if self.request.files: 如果请求中带有文件
myfile = self.request.files['myfile'][0] #得到以myfile标示的文件,并用一个文件对象(咱们也命名为myfile)的实例转存
fin = open("tmp.zip","w") #创建并写的方式打开文件。
print "success to open file" # 服务端产生一个输出
fin.write(myfile["body"]) #吧myflie实例的文件实体部分写入tmp.zip
fin.close() # 关闭tmp.zip文件
message = "document is recieved"
self.write("HTTP/1.1 200 OK\r\n Content-Length:%d \r\n\r\n%s" %(len(message),message)) # 向客户端返回一些信息(注意是有固定格式要求的,不然客户端无法解析)
pic_imp2.start('{"user_id":"duke","params":{"file":"tmp.zip"}}')#调用pic_imp2模块的start函数,并传参(参数为一个json串)
message = "process is done!"
self.write("HTTP/1.1 200 OK\r\n Content-Length:%d \r\n\r\n%s" %(len(message),message)) #向客户端返回消息,提示处理完毕
print "process over" #服务器端显示处理完毕
前台index.html:
<html>
<body>
<h1>欢迎使用传图服务,请选择图片压缩包,点击提交</h1>
<form action="/upload" enctype="multipart/form-data" method="post">
<input name="myfile" type="file">
<input type="submit" value="Submit">
</form>
</body>
</html>
前台为一个html页面,页面内有一个h1标题,有一个表单。
表单里有两个标签,当表单提交时,向服务器发送的请求会加上相对地址/upload,触发post方法,表单数据向服务器提交时,采用multipart/form-data编码(二进制形式上传数据)。
一个file型的input标签,用来选择本地文件,文件选择后,文件标示名设为myfile
一个 submit类型input标签,用来提交并触发对服务器端的post方法。
三、python自带的web功能:
python 一句话搭建web静态网站
from http://www.cnblogs.com/xuxn/archive/2011/02/14/build-simple-web-server-with-python.html
利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:
- python -m Web服务器模块 [端口号,默认8000]
例如:
- python -m SimpleHTTPServer 8080
注意:python3 命令改为:python -m http.server 端口号
然后就可以在浏览器中输入
- http://localhost:端口号/路径
来访问服务器资源。
这种方法可以提供简单的文件服务。
例如:
- http://localhost:8080/index.htm(当然index.htm文件得自己创建)
其他机器也可以通过服务器的IP地址来访问。
这里的“Web服务器模块”有如下三种:
- BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。
- SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。
- CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。