python在web可以开发吗_Python Web开发

参考原文

WSGI接口

WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的建立连接,HTTP原始请求和响应格式等)。WSGI接口定义非常简单,只需要Web开发者实现一个函数,就可以响应客户端的HTTP请求。

这个函数有两个参数:environ:包含所有的HTTTP请求的dict对象;start_response:一个发送HTTP响应的函数。

这两个参数,我们是没有办法提供的,是需要符合WSGI规范的服务器来提供的。

Python内置了一个WSGI服务器,这个模块就wsgiref,是用纯Python编写的,不考虑任何的运行效率,仅供开发和测试使用。接下来,我们就来实现一个基本的响应请求的处理。

首先,编写hello.py,用于实现Web应用程序的WSGI处理函数:

#hello.py

defapplication(environ, start_response):#返回响应的首部

start_response('200 OK',[('Content-Type', 'text/html')])#返回响应的主体

return [b'

Hello,world

']

再编写一个server.py,用于启动WSGI服务器,加载application()函数:

#server.py#导入响应的模块函数:

from wsgiref.simple_server importmake_server#导入先前编写的application函数:

from hello importapplication#创建一个服务器,IP地址为空,渡口是8000,处理函数是application

httpd = make_server('', 8000, application)print('Serving HTTP on port 8000...')#开始监听HTTP请求:

httpd.serve_forever()

在终端运行server.py,并在浏览器输入地址:localhost:8000,效果如下图:

1305509-20180517224741748-477923390.png

在命令行可以看到wsgiref打印的log:

1305509-20180517224908186-1959706391.png

我们也可以根据environ里的参数信息,来生成动态的HTML。

总结:无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body。

使用Web框架

了解了WSGI框架,我们发现:其实一个WebAPP,就是一个WSGI的处理函数,针对每个HTTP请求进行响应。但是WSGI抽象程度还是比较低,我们可以使用Web框架来实现WebAPP。

Python中的Web框架非常多,我们先直接选择一个比较流行的Web框架——Flask来使用。

首先使用pip(Python包管理工具)来安装Flask:

sudo apt install python-pip #安装pip

pip install flask#安装flask

然后编写一个app.py,处理3个URL请求,分别是

GET / : 首页,返回Home页

GET /signin : 登陆页,显示登陆表单,用于用户登陆

POST /signin : 处理用户输入的登陆表单,返回登陆结果

Flask通过Python的装饰器在内部自动地把URL和函数给关联起来,所以我们写出的代码应该这样:

ContractedBlock.gif

ExpandedBlockStart.gif

from flask importFlaskfrom flask importrequest

app= Flask(__name__)

@app.route('/', methods=['GET', 'POST'])defhome():return '

Home

'@app.route('/signin', methods=['GET'])defsignin_form():return '''

'''@app.route('/signin', methods=['POST'])defsignin():if request.form['username'] =='admin' and request.form['password'] =='password':return '

Hello,admmin!

'

return '

Bad username or password!

'

if __name__ == '__main__':

app.run()

View Code

运行python app.py,Flask自带的server在端口5000上监听:

1305509-20180520163346704-910020128.png

打开浏览器,输入首页地址:http://localhost:5000/

1305509-20180520163557581-1878190496.png

继续输入http://localhost:5000/signin:

1305509-20180520164916949-244335860.png

输入预设的用户名admin和密码password,登录成功:

1305509-20180520165102938-817252130.png

输入错误的信息:

1305509-20180520165158685-956319387.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更新丨.NET 7 预览版2 中的 ASP.NET Core

点击上方蓝字 关注我们(本文阅读时间:6分钟).NET 7 预览版2 现已推出,其中包括对 ASP.NET Core 的许多重大改进。以下是此预览版中新增内容的摘要:• 推断来自服务的 API 控制器操作参数;• SignalR 集线器方法的依赖注…

LoadRunner+Android模所器实现抓包并调试本地服务端

为了测试Android软件的服务端的功能,需要重现某些客户端操作,便于发现功能问题,性能问题。也方便客户端与本机服务端特别是服务端代码进行断点调试。这个时候需要对网络操作进行重现。loadRunner是hp公司开发的压力测试工具。功能比较强大&am…

Linux shell命令 cp 加上-f还是提示是否覆盖

这是由于环境变量中有 allias cpcp -i 为了去掉这个系统自带的别名,能够使用grep -r --include"*" "alias cp" /查找设置这个环境变量的脚本文件: 我的ubuntu机器上是: ./.bash_aliases:alias cpcp -i 于是我将./.bash_…

Android之让代码跑在主线程(无context上下文)的封装

1、问题 有一段代码需要跑在主线程里面,但是没有context上下文,一开始直接想到runOnUiThread,好像不行 runOnUiThread(new Runnable(){public void run(){//执行更新ui的操作} }); 2、解决办法 封装一个handler的单例类 import android.o…

Sub-process /usr/bin/dpkg returned an error code (1)

1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名 2.$ sudo mkdir /var/lib/dpkg/info //再新建一个新的info文件夹 3.$ sudo apt-get update,$ apt-get -f install //不用解释了吧 4.$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old //执…

架构师

系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的人。具体来说是一个确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”…

统信uos系统考试题_148款!富士通及旗下晟拓品牌系列打印机适配统信UOS

近日,南京富士通电子信息科技股份有限公司(简称:富士通)及其旗下晟拓子品牌148款主流打印机产品与统信桌面操作系统UOS的适配工作即将完成,这次适配涵盖了富士通及晟拓的常用主流机型。富士通正式成为统信软件产品生态合作伙伴。本次适配&…

手机浏览器html5游戏,移动浏览器都爱 HTML5 ?

目前中国第三方手机浏览器市场竞争正在愈演愈烈,但由于各应用开发商对手机浏览器的内容和资源的整合能力、技术研发能力、战略布局目的等方面均各不相同,浏览器产品也出现了同质化严重、内容匮乏等问题,亮点突出、吸引用户的产品较缺乏&#…

使用 C# 实现 URL 安全的 Base62 转码

Base62 编码与 Base64 编码类似,都用于数据内容编码。Base64 和 Base62 的目的在都在于将需要传输的内容进行编码,尤其是一些特殊字符(如不可见字符、传输时与协议头冲突的字符)。与 Base64 不同的是,Base62 编码是由1…

易成新能加码光伏产业链 作价28.29亿收购赛维两子公司

易成新能11月17日晚公告称,拟通过向债权人发行股份及支付现金方式,合计作价28.29亿元,取得破产重整后江西赛维100%股权和新余赛维100%股权。 同时,公司拟向控股股东中国平煤神马集团等5名对象,募集配套资金不超过21亿元…

sql学习笔记---公用表达式(CTE)

http://www.cnblogs.com/kissdodog/archive/2013/06/24/3153012.html转载于:https://www.cnblogs.com/changrulin/p/5108917.html

python中匿名函数的作用_什么是Python中的匿名函数

匿名函数 lambda x , y : xy 1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的。 2.匿名函数的参数规则、作用域关系与有名函数是一样的。 3.匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值。 flambda x,n:x ** n print(f(2,3))…

IOS学习笔记二十NSSet和NSMutableSet

1、NSSet、NSMutableSet NSSet元素无序、不能重复 NSMutableSet元素无序、不能重复,有一些向集合中增加元素的功能、删除元素....... 2、测试Demo int main(int argc, char * argv[]) {autoreleasepool {NSSet *set [NSSet setWithObjects:"chenyu", "hello…

怎么快速了解自己的MySQL服务器?

From: http://www.cnblogs.com/benshan/archive/2013/01/09/2853097.html 1、查看数据库服务器状态:status Linux 下的MySQL服务器状态 该列表中主要包括MySQL的版本(为version 5.1.61)、运行平台(debian-linux-gnu(i686)&#xf…

八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?

要了解七类网线如何使用?需要掌握这四个问题:1、什么是七类网线?2、七类网线与六类网线有什么区别?3、七类网线用什么水晶头?如何制作7类网线水晶头?4、7类网线的应用场景?带着这四个问题&#…

html 图片 保持长宽比,实现图片在页面中宽高一直保持16:9比例的方法

实现图片在页面中宽高一直保持16:9比例的方法发布时间:2020-08-31 14:25:10来源:亿速云阅读:133作者:小新小编给大家分享一下实现图片在页面中宽高一直保持16:9比例的方法,希望大家阅读完这篇文…

poj2632 累死了

题意: 给定A*B的格子,放入N个机器人,每个机器人初始位置及朝向给定。给定M条指令。指令类型有三种: 1、L:左转90 2、R:右转90 3、F:前进一格 问执行指令过程中机器人是否发生碰撞&am…

Ubuntu 16.04安装Chrome浏览器

一、先有一个hosts能访问Google 参考:http://www.cnblogs.com/EasonJim/p/5999060.html 二、安装方法有两种,如下所示: 1、下载deb包(推荐) #下载 wget https://dl.google.com/linux/direct/google-chrome-stable_curr…

代码生成器原理

整个架设思路分的4个部分:A:底层物理数据库层,主要是存储数据用的。B:数据库访问层,主要是为了写一套代码可以跑在多种数据库上。C:一些辅助工具、基础组件,是为了加强自动产生代码的功能、简化…

IOS学习笔记二十一(NSDictionary、NSMutableDictionary)

1、NSDictionary、NSMutableDictionary 可以理解为java里面的map,一个key对应一个value,key不可以重复 NSDictionary不可变,NSMutableDictionary可变 NSMutableDictionary比NSDictionary多了一些增加,删除,修改的函数 比如set…