python搭建简单的web服务器,Python搭建服务器
目的利用现有丰富的图片资源,建立一个图片浏览网站。
条件开发语言:python3
库:flask:一个开源的python web服务器框架
Jinja2:flask的默认模板引擎
编辑:推荐pycharm
Python,最简单的web服务器,给我们提供了一个接口:WSGI:Web服务器网关接口。
它只需要Web开发人员实现一个函数来响应HTTP请求。不接触TCP连接,HTTP原始请求和响应格式。
以下示例是最简单的web应用程序:
# hello . pydef application(environ,start _ response):start _ response( 200 OK ,[(Content-Type , text/html)]) return [bh1Hello,Python web!/h1 ]# server . py # Import from wsgiref模块:from wsgiref . simple _ server Import make _ server # Import我们自己的应用程序函数:from hello import application#创建一个IP地址为空的服务器,端口为8000,处理函数为application: HTTPd=make _ server(,8000,application)print( serving http on port 8000.)#开始监听HTTP请求:httpd.serve_forever() environ:一个包含HTTP请求所有信息的dict对象;Start_response:发送HTTP响应的函数。把两个脚本放在同一个目录下,运行server.py,访问http://127.0.0.1:8000,看看效果。
处理URL实际上是一个web应用,即不同URL的处理。
我们将修改hello.py
def application(environ,start_response):METHOD=environ[ REQUEST _ METHOD ]PATH=environ[ PATH _ INFO ]if METHOD== GET and PATH==/:返回handle_home(environ,Start _ response)if METHOD== post and PATH=/sign in :返回handle _ signin (environ,Start _ response).这将处理两个URL,“/”和“/登录”
当然,你可以一直这样写下去……如果你不太累的话。
使用模板既然上面的方法太累太慢,那就来学点高级的吧:
瓶
看代码。
from Flask import Flask from Flask import request app=Flask(_ _ name _ _)@ app . route(/,methods=[GET , POST ])def home():return h1 home/h1 @ app . route(/sign In),Methods=[ GET ])def sign In _ form():return form action=/sign In method= POST pin put name= username /p pin put name= password type= password /p button type= submit 登录/button/p /form/H3 返回 H3错误的用户名或密码。/H3 if _ _ name _= _ _ main _ :app . run()注意,这是一个单独的文件。
要分析该脚本:
Flask通过Python的decorator在内部自动关联URL和函数。
跑步之后,我们参观
/,你看到的页面是一个“家”字
/sign in ,目前通过GET访问。你看到的是一个表格。填写‘管理员’和‘密码’,点击登录3354。
/signing,目前通过POST访问,是Hello,admin!或者错误的用户名或密码。
对于不了解GET、POST和html表单的同学,建议学习HTML的基础知识。
不过这样还是有些不灵活,用户访问看到的内容都需要写出来,不能重用,太麻烦了。
使用模板引擎模板解决了我们上面的问题。先看一段代码。
from flask导入flask,request,render _ template import osapp=Flask(_ _ name _ _)@ app . route(/,methods=[GET ,Post ])def html():path=/ all _ file=OS . listdir(path)return render _ template( home . html ,all _ file=all _ file)if _ _ name _ _= _ _ main _ :app . run
然后,在与相同的目录中创建目录模板。py,存放模板的地方。模板的特殊之处在于python指令和变量可以在html中使用。
home.html
{ % for I in all _ file % } a rel= external no follow href=/page/{ { I } } { { I } }/a { % end for % } { % % }是一条指令。
{{}}是变量。
所以最终的结果是,会生成多个标签,标签的名字就是目录名。
以上基础教程参照廖雪峰。
那么,基础已经将完了,接下来就会是成品了:
成品用我们上次爬取的图片来建站,好主意!
这里在。巴拉圭脚本同目录下建立一个静电目录存放图片。(图片放在。巴拉圭所在目录外层会链接不到)
#漂亮_ pic。巴拉圭从烧瓶导入烧瓶从烧瓶导入请求从烧瓶导入render _ template import osapp=Flask(_ _ name _ _)#显示所有文件夹@app.route(/,methods=[GET , POST])def list_all(): path= ./static/mzi tu/ all _ pic=OS。listdir(path)返回render _ template( welcome。html ,all_pic=all_pic)#具体展示图片@app.route(/path ,methods=[GET , POST])def list_pic(path): #错误链接无法找到图片目录就提示错误链接如果(路径不在os.listdir( ./static/mzitu/):返回render _ template(错误。html )pic _ path= ./static/mzi tu/ path all _ pic=OS。listdir(pic _ path)返回render _ template( pic。 html ,title=path,all _ pic=all _ pic)if _ _ name _ _= _ _ main _ _ :# port为端口,主机值为0.0.0.0即不单单只能在127.0.0.1访问,外网也能访问app.run(主机=0.0.0.0 ,端口=2333 )然后是模板文件
welcome.html
!文档类型html html lang= en head meta charset= UTF-8 标题欢迎来到福利页面/title/head body { % for I in all _ pic:% } a rel= external no follow href=/{ { I } } { { I } }/a brbr { % end for % }/body/html pic.html
!DOCTYPE html html lang= en head meta charset= UTF-8 title { { title } }/title/head body { % for I in all _ pic % } img src= ./static/mzi tu/{ { title } }/{ { I } } alt= { { I } } br { % end for % }/body/html error.html
!文档类型html html lang= en head meta charset= UTF-8 标题出错了/标题/床头你要访问的页面不存在.br a rel=外部nofollow href=/点此返回首页/a/body/html最后成品网站在这http://www.flycold.cn
端口为随机端口,范围在2000-2100之中,相信大家都能找到吧。
如果外网还是无法访问请关闭防火墙!
最后一句:本节只是给大家一个示范,python如何写网服务器,个人感觉比apache php有趣得多!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。