用 Python 构建 web 应用

如果说仅仅要用 Python 构建 web 应用,可以将 socket 连接、HTTP 原始请求和响应格式等涉及网络基础的东西交给现成的库来实现,只需要专注于 web 端界面、交互、业务逻辑以及数据库的设计,那么使用 Python 构建一个 web 应用实际上就比较简单了。

关于 Python 这门语言

这是我第一次使用 Python 语言,简单了看了下 廖雪峰的 Python 教程,了解了相应的语法和 web 开发相关的内容。其实在编写代码时能感受到,Python 确实挺容易上手的,有些地方看上去语法很奇怪或者说难以理解,但是回过头对照教程里的基础知识又能够明白个大概。Python 中有一些如 __main____init____name__ 这类特殊变量,在刚开始使用的时候按照教程写,然后根据 Python 教程对照着看,感觉还是可以明白的。

简单的 web 应用:Hello Web

这一部分可以看下 廖雪峰的 Python 教程 中关于 WSGI 接口的内容,简单提一下:

# simple_server.py
from wsgiref.simple_server import make_server def application( environ, start_response ):
start_response( '200 OK', [ ('Content-Type', 'text/html') ] )
return [b'<h1>Hello, Web</h1>'] httpd = make_server( '', 8080, application )
print('Serveing HTTP on port 8080...') httpd.serve_forever()

如果你使用的 Python 是 3.x,那么在运行上面这段代码时可能就会报错,如果报错内容和 wsgiref handlers 有关,那么可以参考 python3.4中自定义wsgi函数,make_server函数报错问题 这篇文章的解决方法,将 /path_to_python_installation/Lib/wsgiref 目录下的 handlers.py 文件中关于 finish_response 的部分修改(约第 180 行):将 self.write(data) 改成 self.write(data.encode())

然后打开浏览器,访问 127.0.0.1:8080 端口就可以看到 “Hello Web” 了。

使用 flask 框架进行开发

上面使用 wsgiref 可以很方便的制作简单的 web 应用。但是如果要制作较复杂的应用,那么还是使用框架吧,这样会简化很多工作。我使用的是 flask 框架。使用 pip install flask 安装即可。

虽说框架实现隐藏了很多细节的东西,但是要掌握它也要花点时间,好在它的文档比较详细,而且有一些基础的示例,能够很快做出一个页面来:

# webserver.py
from flask import Flask
from flask import request, render_template, url_for, json, make_response, redirect app = Flask( '__main__' ) @app.route( "/", methods = [ 'GET', 'POST' ] )
def home():
resp = make_response( render_template( 'index.html' , title='test' ) )
resp.set_cookie( 'username', 'test username' )
# for user in db.query( 'select * from `account`' ):
# print(user['port'], user['password'])
return resp

上面这段代码就可以让你在访问浏览器时得到一个简单的 web 界面,另外我还在网页中存储了一个 username: test username 的 cookie。使用 python webserver.py 运行服务器程序,然后在浏览器访问 127.0.0.1:5000 就可以看到一个简单的网页了。

使用 flask 比较麻烦的一点是作为模版的 html 文件需要放在 webserver.py 文件同级目录的 templates 目录,也可以在构造 Flask 对象的时候指定模板路径,但是感觉还是不够灵活。模板文件的语法可以参考 jinjia2

还有一点是关于静态文件的加载,静态文件需要放在同级目录的 static 目录,如果直接在 html 中引用 /css/bootstrap.min.css,在浏览器访问时会出现找不到文件的问题,可以将引用的路径改成 /static/css/bootstrap.min.css,我在 webserver 中添加了一个方法:

@app.route( '/css/<filename>', methods = [ 'GET' ] )
def static_css( filename ) :
with open( './static/css/' + filename, 'r', encoding='utf-8' ) as f :
resp = make_response( f.read() )
resp.mimetype = 'text/css'
return resp

在读取 css 静态文件时,到相应的目录下找到对应的文件读取内容,然后把响应的 mimetype 改成 text/css,否则的话默认响应类型是 text/plain,浏览器会出现警告。

小结

至此,一个简单的 web 应用就做好了,但是内容还比较少,而且也没有具体的业务逻辑和数据库操作。相关的内容 flask 框架已经提供了,需要查看 flask 教程。

References

  1. 廖雪峰的 Python 教程
  2. python3.4中自定义wsgi函数,make_server函数报错问题
  3. python3 运行时报错解决方法
  4. flask
  5. jinjia2

用 Python 构建 web 应用的更多相关文章

  1. Python构建web应用(进阶版)->对网页HTML优化逻辑显示

    本篇是承接上一篇web应用(入门级)的内容往下顺延的,阅读后将会了解HTML逻辑显示优化,如下图所示,从杂乱无章的日志文件到一个整齐的列表显示. —————————————————————————— ...

  2. 零基础学python之构建web应用(入门级)

    构建一个web应用 前面的学习回顾: IDLE是Python内置的IDE,用来试验和执行Python代码,可以是单语句代码段,也可以是文本编辑器中的多语句程序. 四个内置数据结构:列表.字典.集合和元 ...

  3. 全面解读Python Web开发框架Django,利用Django构建web应用及其部署

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  4. Python Django(WEB电商项目构建)

    (坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...

  5. 使用Vert.x构建Web服务器和消息系统

    如果你对Node.js感兴趣,Vert.x可能是你的下一个大事件:一个建立在JVM上一个类似的架构企业制度. 这一部分介绍Vert.x是通过两个动手的例子(基于Vert.x 2.0). 当Node.j ...

  6. python各种web框架对比

    0 引言        python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...

  7. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  8. 常见Python的Web开发框架

    在今天,Python里有很多开发框架用来帮助你轻松创建web应用.web开发框架存在的意义就在于可以快速便捷的构建应用,而不用去在意那些没必要的技术细节(协议.报文.数据结构). 到2020年为止,基 ...

  9. Python的web开发

    一.Web开发 Tcp   udp       Cs即客户端.服务器端编程,客户端和服务器端之间需要使用socket,约定协议.版本(协议使用的是tcp或者udp).Tcp协议和udp协议,指定地址和 ...

随机推荐

  1. 一、认识Node.js

    1.什么是Note.js? 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个 Javascript 运行环境(runtime).它让 JavaScript 可 ...

  2. OC 术语表

    术语表 本附录包含了很多会用到的非正式定义术语.有些术语与Obective-C语言有关,其他术语则有自己的语源,来自面向对象程序设计的规范.在后一种情况中,术语的含义只有明确应用于Obective-C ...

  3. The method identifyUser(Arrays.asList("group001"), String, new HashMap<>()) is undefined for the type AipFace

    在使用百度云的人脸识别sdk时遇到了这个错误,网上百度不到解决的方法,当我浏览百度云的时候发现了这个 于是考虑到版本可能更新,出现了新的函数代替旧的函数,于是去查文档,文档链接如下 https://c ...

  4. linux命令笔记,零散记录<不完整,学习用>

    uname -a 输出系统架构 cp 源文件 目标文件 mv同理 tar –xvf file.tar // 解压 tar包 tar -zxvf file.tar.gz // 解压tar.gz tar ...

  5. kali linux之netcat

    网络工具中的瑞士军刀----体积小,功能强大 侦听模式/传输模式 telnet/获取banner信息 传输文本信息,文件,目录 加密传输文件,远程控制/木马,加密所有流量(来做远程控制是非常理想的选择 ...

  6. C# Winform下一个热插拔的MIS/MRP/ERP框架12(数据处理基类)

    作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update ...

  7. loj #6121. 「网络流 24 题」孤岛营救问题

    #6121. 「网络流 24 题」孤岛营救问题   题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂, ...

  8. ceph_osd故障检测

    1.     当前monitor可以通过3种途径检测到osd离线 1)      Osd自主上报 2)      Osd通过投票的方式(满足一下条件之一,mon会将osd标记为down) a)     ...

  9. 犯得错误QAQ

    1.十年OI一场空,不开longlong见祖宗(丢过150分) 2.计算完了再开数组,开的足足的.不要少开0:(丢过一共200分) 3.最大值,最小值一定开成7个f.(丢了20分). 4.freope ...

  10. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...