Python  Web编程入门

web应用程序的工作原理简易示意如下图:

一般的,网站使用HTML语言来编写,放在Web服务器上,用户使用浏览器发送HTTP协议请求服务器上的Web页面,服务器上Web服务器将接收到的用户请求进行相应处理后进行相应处理,再将处理结果以HTML文件的形式发送给客户端浏览器,显示给用户。

HTTP协议在Web领域的重要性不必赘述,这样一个重要的概念,如果交给开发者去实现,且不谈编程,单是看懂庞大的协议,就会花掉大量的时间,幸好有一些,幸好有一些很成熟的库或框架库为我们减轻了大量机械重复的工作。

【HTTP简单地说就是浏览器和服务器聊天是的一种约定, 这个约定确保双方互相理解。其实完整的HTTP是非常复杂的,《HTTP权威指南》一书厚达700多页。

有关HTTP可参见 HTTP和HTTPS学习笔记_cnds123的专栏-CSDN博客

全面理解HTTP协议 http://www.52im.net/thread-1677-1-1.html 】

Web 开发可以粗略地定义为构建、创建和维护一个网站。

Web开发在近年来,随着本身技术的突破以及移动设备的普及,基于web领域的开发,也出现了明确的岗位职责分工,一个web互联网产品中,基本上会分为web UI设计、Web前端开发以及web后端开发。

Web应用开发通常分为前端(front-end)、后端(back-end)、全栈(full stack)开发,示意图如下:

Web前端开发

Web前端开发用到的编程语言主要有javascript,以及伴随有标记性文本语言html和样式渲染方式CSS。以及近年来衍生出来的一批优秀web前端框架,使web前端在应用构建方面的效率得到显著提升。

Web后端开发

Web后端开发,主要用到的语言有java、php、python等,当前nodeJs更多的是面向web前端开发人员,随着nodeJs的兴起发展,也成为近年来服务端开发的另一种选择。

Web全栈开发

Web全栈开发,从程序开发的角度来说,就是开发人员可以承担包括前端和后端在内的所有功能的开发任务。

关于这些更多情况,可参见 Web中一些术语的含义_cnds123的专栏-CSDN博客

Python为进行Web开发提供了WSGI(Web Server Gateway Interface, Web 服务器网关接口)。WSGI是 Web 服务器软件和用 Python 编写的 Web 应用程序之间的标准接口,具有标准接口能够让支持 WSGI 的应用程序与多种不同的 Web 服务器配合使用, WSGI为开发者封装了HTTP协议的实现,将网络通信抽象为接收数据报和发送数据报的简单方法/函数,关于Python的WSGI 可参考wsgiref --- WSGI 工具和参考实现 — Python 3.10.1 文档。

WSGI提供的接口虽然比HTTP接口高级了不少,但和Web App的处理逻辑比,还是比较低级,在WSGI接口之上能进一步抽象,就有了Web框架。

Web编程,涉及的范围太广,本文主要简要介绍Python Web编程使用的目前较为主流Django 和 Flask框架。

什么是 Web 框架,为什么如此重要?可以把 Web 框架想象成一个工具箱。一个 Web 框架是预先写好的,由标准化的代码组成,为编写 Web 应用程序服务,目的是为了使开发更快、更容易,包装和模块的集合,使 web 应用程序更加可靠,更容易扩展。Web 框架用在后端(服务器端),如用在 URL 路由,HTTP 请求和响应,访问数据库以及 Web 安全。虽然不一定非要使用 Web 框架,但建议普通开发者使用它,因为它可以帮助你用更少的时间开发更复杂的应用程序。

Django框架

为了在更短的时间内创建复杂、高质量的 web 应用,很多 web 开发人员会首选 Django 框架。Django 提供了一个开放源代码的高级框架,它内置了许多模块,极大的方便了 Web 开发者,也正是由于它的“全面性”,增加学习入门难度。

Django采用了MVT的框架模式,即模型M,视图V和模版T,最早于2005年发布。Django被认为是"大而全"的重量级Web框架,其自带大量的常用工具和组件(比如数据库ORM组件、用户认证、权限管理、分页、缓存), 甚至还自带了管理后台Admin,适合快速开发功能完善的企业级网站。Django自带免费的数据SQLite,同时支持MySQL与PostgreSQL等多种数据库。

Django 官网:https://www.djangoproject.com/

Django中文文档Django 文档 | Django 文档 | Django

Django源码 https://github.com/cookiecutter/cookiecutter-django

Flask框架

Flask 被认为是一个微框架,是一个简约的 Web 框架。它不那么“包含电池”,这意味着它缺少像 Django 这样的全栈框架提供的许多特性和功能,例如 Web 模板引擎,帐户授权和身份验证。

Flask是一个由Python语言写成的轻量级Web框架,最早由奥地利人Armin Ronacher于2010年发布。Flask最显著的特点是它是一个“微”框架(micro-framework),轻便灵活,但同时又易于扩展(Extensions)。默认情况下,Flask 只相当于一个内核,不包含数据库抽象层(ORM)、用户认证、表单验证、发送邮件等其它Web框架经常包含的功能。Flask依赖用各种灵活的扩展(比如邮件Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy)来给Web应用添加额外功能。Flask的这种按需扩展的灵活性也是缺点你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表。

Flask文档Welcome to Flask — Flask Documentation (2.0.x)

Flask文档(中文)欢迎来到 Flask 的世界 — Flask 中文文档 (2.0.2)

Flask源码 https://github.com/pallets/flask

Flask扩展是指为 Flask 应用增加功能的包(packages)

Flask扩展 Extensions — Flask Documentation (2.0.x)

Flask扩展中文 扩展 — Flask 中文文档 (2.0.2)

Flask框架使用

Flask是一个用Python编写的Web应用程序框架。它由Armin Ronacher开发,他领导一个名为Pocco的国际Python爱好者团队。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎,两者都是Pocco项目。对于这些新手不清楚是正常的不必惊恐不安,在此以上手实践为主,介绍使用flask搭建web网站技术,让我们从简单例子入手吧。

Flask框架不是python的标准库,在使用Flask之前需要安装,可以使用pip命令安装。

【有关安装的详情可参见 Python第三方模块(库、包)安装、卸载与查看及常见问题解决_cnds123的专栏-CSDN博客_python卸载第三方库】。

打开cmd输入:

pip install flask

【若你的电脑上,安装了多个版本的python,想为指定版本如-3.10安装flask

py -3.10 -m pip install flask 】

当安装 Flask 时,以下配套软件会被自动安装。

Werkzeug 用于实现 WSGI ,应用和服务之间的标准 Python 接口。

Jinja 用于渲染页面的模板语言。

以及:

MarkupSafe 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。

ItsDangerous 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie.

Click 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令。

例1、新建一个py文件,名为:FlaskDemo.Py,源码如下:

from flask import Flask
app = Flask(__name__)@app.route("/")
def hello():return "Hello World!"if __name__ == "__main__":app.run()

我这里,将此源码保存文件名为:FlaskDemo.Py,将此文件放在这个文件夹:D:\PythonWeb编程实践

如何运行这个简单的网站?

按下F5键运行之,参见下图:

更常用的是用命令行运行,先打开cmd再输入

Python D:\PythonWeb编程实践\FlaskDemo.py

然后,再用浏览器打开 http://127.0.0.1:5000 http://locahost:5000, 就可以看到一个显示 "Hello World!" 字样的网页,如下图:

上述程序代码说明

from flask import Flask

导入了 Flask 类。该类的实例将会成为我们的 WSGI 应用。

app = Flask(__name__)

创建Flask对象,__name__是Python中的特殊变量,如果文件作为主程序执行,那么__name__变量的值就是__main__,如果是被其他模块引入,那么__name__的值就是模块名称。

@app.route('/')

def hello_world():

return 'Hello, World!'

使用 route() 装饰器来告诉 Flask 触发函数 的 URL 。对路径'/'的请求,将转为对hello_world()函数的调用。

代码中使用了装饰器来制定路由url:

@app.route('/')    #调用route路由方法,括号里给定参数,/符号默认为首页

又如:

@app.route('/home/user')    #调用route路由方法,/home/user定位到访问user方法页面

return语句里还可以加入html代码,这样就可以输出一定的格式控制网页内容了,如修改如下:

return '<h3>welcome to my webpage!</h3><hr><p style="color:red">输出语句测试</p>'

不过要在return里语句加入html长串代码,显然不合适,所以需要使用flask库里的Jinja2模板引擎,调用flask模块里的render_template方法,将静态的html文件传入,同时也可以将数据传输到html文件中显示。此时我们修改一下上述例子代码:

from flask import  Flask, render_template  #导入render_template模块

app=Flask(__name__)

@app.route('/')

def hello_world():

return render_template("index.html")   #调用render_template方法/函数,传入html文件参数

【flask之render_template方法/函数 API — Flask 中文文档 (2.0.2) 】

app.run()

启动了一个非常简单的内建的服务器。

run()主要是为flask应用启动一个server。需要注意的是,请勿在生产设置中使用run(),它不是为了满足生产服务器的安全性和性能要求。相反,请参见部署方式部署方式 — Flask 中文文档 (2.0.2)  对于WSGI服务器建议。

【关于run()方法详情,可参见 API — Flask 中文文档 (2.0.2) 】

格式:run(host=None, port=None, debug=None, **options)

host:主机,在使用run()启动服务的时候指定的IP地址,默认情况下是127.0.0.1

port:端口,是run()启动服务的时候指定的运行端口,默认是5000

debug:调试,如果需要进入调试模式,可以将这个选项设置成ture

options:选项参数是将server的参数传送到Werkzeug server去处理。

run()方法例子:

1、指定访问的网站地址的方法: (加入host的参数指定当前机器的ip)

app.run(host="192.168.1.109",debug=True)

2、如果机器存在多个网卡或代码放到另外一台机器,让他智能识别(直接输入当前及其的ip即可)

app.run(host="0.0.0.0",debug=True)

3、修改访问的端口号的方法:(加入port的参数指定端口)

app.run(host="192.168.1.109",debug=True, port=81)

4、开启多进程 和 多线程的 方法

开启单进程多线程方法,一般threaded 默认为flase 为单进程单线程,即客户端发10个请求过来 要排队去处理,改为True就是多线程

开启多进程的方法是加processes 一般不填写默认为1 即一个进程

app.run(host="192.168.1.109",debug=True, port=81, threaded=True, processes=1)

例2、下面演示使用独立的HTML文件的简单网站,本例项目结构

本例需要两个文件:

一个py文件,名为:FlaskDemo2.Py,存放位置:D:\PythonWeb编程实践,源码如下:

from flask import Flask ,render_template  #导入render_template模块
app = Flask(__name__)@app.route("/")
def hello():msg="中国,腾飞!"return render_template("myIndex.html",data=msg)  #传入html文件参数,且加入变量传递if __name__ == "__main__":app.run(host="127.0.0.1",port=5005)

一个HTML文件,名为:myIndex.html,存放位置:D:\PythonWeb编程实践\templates,特别提示templates这个子文件夹名是render_template模板默认的,源码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask技术练习</title>
</head>
<body>欢迎来到这个简单的网站<hr><p>这是采用render_template模板方法获得的内容:</p><br>{{data}}  <!-- 显示出传递过来的变量内容 -->
</body>
</html>

如何运行这个简单的网站?

先打开cmd再输入:

Python D:\PythonWeb编程实践\FlaskDemo2.py,显示如下:

然后,再用浏览器打开 http://127.0.0.1:5005 或http://locahost:5005

例3、前端提交的数据如何传到后端例子

本例使用jQuery和ajax实现数据的异步传输。包含两个文件:

FlaskDemo3.py文件内容如下,存放位置:D:\PythonWeb编程实践

from flask import Flask, render_template, request, jsonify
#创建Flask对象app并初始化
app = Flask(__name__)#通过python装饰器的方法定义路由地址
@app.route("/")
#定义方法 用jinjia2引擎来渲染页面,并返回一个index.html页面
def root():return render_template("index.html")#app的路由地址"/submit"即为ajax中定义的url地址,采用POST、GET方法均可提交
@app.route("/submit",methods=["GET", "POST"])
#从这里定义具体的函数 返回值均为json格式
def submit():#由于POST、GET获取数据的方式不同,需要使用if语句进行判断if request.method == "POST":name = request.form.get("name")age = request.form.get("age")if request.method == "GET":name = request.args.get("name")age = request.args.get("age")#如果获取的数据为空if len(name) == 0 or len(age) ==0:return {'message':"error!"}else:return {'message':"success!",'name':name,'age':age}#定义app在8080端口运行
app.run(port=8080)

index.html文件内容如下,存放位置:D:\PythonWeb编程实践\templates

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Flask技术练习</title>
</head>
<body><!--引入jQuery包用于使用ajax--><script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><h3>请输入你的姓名和年龄</h3><!--创建两个input输入框,定义id分别为name,age--><input type="text" id="name" name="name" placeholder="姓名"><br><input type="text" id="age" name="age" placeholder="年龄"><br><!--创建button按钮,点击则激发submit()事件--><button onclick="submit();">提交</button><script>/*在这里编写submit()事件*/function submit() {$.ajax({url: "submit", /*数据提交到submit处*/type: "POST",  /*采用POST方法提交*/data: { "name": $("#name").val(),"age":$("#age").val()},  /*提交的数据(json格式),从输入框中获取*//*result为后端函数返回的json*/success: function (result) {if (result.message == "success!") {alert(result.message+"你的名字是"+result.name+",你的年龄是"+result.age)}else {alert(result.message)}}});}</script>
</body>
</html>

如何运行这个简单的网站?

先打开cmd再输入:

Python D:\PythonWeb编程实践\FlaskDemo3.py,显示如下:

然后,再用浏览器打开 http://127.0.0.1:8080 或 http://locahost:8080

输入姓名和年龄后,单击“提交”按钮,将出现“提示”框。

进一步学习:

Python Flask框架:零基础web开发入门教程

https://segmentfault.com/a/1190000017330435

Python 四大主流 Web 编程框架

Python 四大主流 Web 编程框架 - 奋斗的小农 - 博客园

Django入门进阶与项目实战

https://segmentfault.com/a/1190000039401379

(待续)

Python Web编程入门相关推荐

  1. python与人工智能编程-总算明白python人工智能编程入门案例

    Python是非常简洁的一种脚本语言,写同样的程序,代码量仅为java的三分一,除了性能没有Java强之外,它的优点还是相当多的.以下是小编为你整理的python人工智能编程入门案例 下载Active ...

  2. 《Python游戏编程入门》——1.2 初识Python

    本节书摘来自异步社区<Python游戏编程入门>一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  3. [转载] Python快速编程入门课后程序题答案

    参考链接: Python程序添加两个矩阵 前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出 ...

  4. python交互式编程在哪里_终于明了python交互式编程入门

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python交互式编程入门 环境配置:下载Python并 ...

  5. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  6. 黑马程序员 python快速编程入门课后答案_Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

  7. Python快速编程入门课后习题答案

    文章目录 前言 第一章 一.填空题 二.判断题 三.选择题 四.简答题 第二章 一.填空题 二.判断题 三.选择题 四.简答题 第三章 一.填空题 二.判断题 三.选择题 四.简答题 第四章 一.单选 ...

  8. python游戏编程入门p_Python游戏编程入门 PDF高清完整版

    Python游戏编程入门 PDF高清完整版 作者: 哈伯 (Jonathan S.Harbour) 译者: 李强 出版年: 2015-1-1 页数: 292 装帧: 平装 ISBN: 97871153 ...

  9. Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

  10. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

最新文章

  1. Win10系列:JavaScript动画2
  2. windows 64位 dll文件 位置及python包rtree shapely安装
  3. NASM汇编程序中的宏定义
  4. 磁盘操作系统是计算机语言吗,实时磁盘操作系统
  5. Teechart动态设计方法
  6. 两高发布司法解释 依法严惩涉地下钱庄犯罪
  7. 2018年7月份,python上传自己的包库到pypi官网的方法
  8. Qt实现表格内进度条展示数据
  9. 本地mysql数据库初始密码_忘记本地MySQL数据库密码的解决方法
  10. 几句话就能让你明白:热备份路由选择协议(HSRP)
  11. PM2服务器启动nodejs项目
  12. 学习嵌入式必须学习32单片机吗?
  13. 施乐j75服务器电源管理系统,富士施乐推出印刷系统 Color J75 Press
  14. 计算机排名的985大学排名,最新985大学排名榜名单
  15. python中步长_python步长什么意思
  16. 对TexStudio配置拼写和语法检查LanguageTool
  17. Oracle EBS财务模块(三)总账功能
  18. 升级鸿蒙系统最新计划,华为鸿蒙系统更新升级方法分享
  19. 农业动物相关数据集与算法——调研整理
  20. flask获取参数类型和请求响应

热门文章

  1. IntelliJ IDEA下SVN的配置及使用说明
  2. php访问对象的成员,如何使用PHP从JSON访问另一个对象内的类的成员
  3. 去除两张img中间的间隙
  4. 转,python的匿名函数lambda解释及用法
  5. Github Atom汉化方式
  6. QWidget QMainWindow QDialog 三者区别
  7. IOS - UITableView分批显示数据 实现点击加载更多
  8. CSS display 常用属性小结
  9. Linux kernel SMP 中断机制
  10. 巧替换windows 7中的宋体 simsun.ttc