您的位置:首页 > 编程语言 > Python开发

Python Web开发——学习笔记

2016-07-08 17:46 435 查看
1、Web应用开发可以说是目前软件开发中最重要的部分。Web开发也经历了好几个阶段:

静态Web页面:由文本编辑器直接编辑并生成静态的HTML页面,如果要修改Web页面的内容,就需要再次编辑HTML源文件,早期的互联网Web页面就是静态的;
CGI:由于静态Web页面无法与用户交互,比如用户填写了一个注册表单,静态Web页面就无法处理。要处理用户发送的动态数据,出现了Common Gateway Interface,简称CGI,用C/C++编写。
ASP/JSP/PHP:由于Web应用特点是修改频繁,用C/C++这样的低级语言非常不适合Web开发,而脚本语言由于开发效率高,与HTML结合紧密,因此,迅速取代了CGI模式。ASP是微软推出的用VBScript脚本编程的Web开发技术,而JSP用Java来编写脚本,PHP本身则是开源的脚本语言。
MVC:为了解决直接用脚本语言嵌入HTML导致的可维护性差的问题,Web应用也引入了Model-View-Controller的模式,来简化Web开发。ASP发展为ASP.Net,JSP和PHP也有一大堆MVC框架。

2、 浏览器和服务器之间的传输协议是HTTP;网络之间的传输协议是TCP/IP
3、HTTP请求过程:

步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
路径:/full/url/path;
域名:由Host头指定:Host: www.sina.com.cn
以及其他相关的Header;
如果是POST,那么请求还包括一个Body,包含用户数据。

步骤2:服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;
响应类型:由Content-Type指定;
以及其他相关的Header;
通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。
4、HTTP GET请求的格式:
GET /path HTTP/1.1

Header1: Value1 #\r\n
Header2: Value2 #\r\n
Header3: Value3
每一个header一行一个,换行符是:\r\n
5、HTTP POST请求的格式:
POST /path HTTP/1.1

Header1: Value1

Header2: Value2

Header3: Value3
#\r\n\r\n 表示body部分开始, Body的数据类型由
Content-Type
头来确定
body data goes here...

6、HTTP响应格式:
200 OK

Header1: Value1

Header2: Value2

Header3: Value3

body data goes here...

7、WSGI:Web Server Gateway Interface 实现底层代码,TCP连接、HTTP原始请求和响应格式
# hello.py 这个模块相当于一个浏览器

def application(environ,start_response): # 第二个参数是一个方法名

start_response('200 0k ' ,[('Content-Type','text/html')])
# 第二个参数是一个list,list里每一个元素是一个tuple

body = r"<h1>hello %s </h1>" % (environ['PATH_INFO'][1:] or 'web')
#body的内容只需要是HTML中body的内容,不需要<html></html>

return [body.encode('utf-8')] # return 字节 这里一定要是返回list类型,不是去掉中括号,否则会出现参数类型不匹配的错误
# server.py 服务器

from wsgiref.simple_server import make_server

from Web.hello import application

httpd = make_server('',8088,application) # 创建一个服务器,IP地址为空,端口是8000,处理函数是application:

print('Server is HTTP on 8088...')

httpd.serve_forever()
无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过
environ
获得,HTTP响应的输出都可以通过
start_response()
加上函数返回值作为Body。
复杂的Web应用程序,光靠一个WSGI函数来处理还是太底层了,我们需要在WSGI之上再抽象出Web框架,进一步简化Web开发。
8、使用web框架Flask

# app.py

# -*- coding: utf-8 -*-

from flask import Flask

from flask import request

app = Flask(__name__)

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

def home():

return '<h1>this is homepage !</h1>'

@app.route('/signin',methods=['GET'])
# 如果地址栏的信息/signin,且methods=['GET'],则运行signin_form方法

def signin_form():

return r"<form action='/signin' method=POST><input name='username'/>" \
r"<input type=password name='password'><input type=submit></form>" # form标签里别忘了写action和method

@app.route('/signin',methods=['POST'])

def signin():

if request.form['username']=='admin' and request.form['password'] == '123':

return '<h3>sign in successful</h3>'

else:

return '<h3>sign in failed</h3>'

if __name__ == '__main__': # 确保是在本模块内调用该方法,如果被其他模块引用,其他模块是无法运行此模块的
app.run()
# 运行方式:在地址栏中输入 http://localhost:5000/signin 。5000是flask自带的端口号
有了Web框架,我们在编写Web应用时,注意力就从WSGI处理函数转移到URL+对应的处理函数,这样,编写Web App就更加简单了。
在编写URL处理函数时,除了配置URL外,从HTTP请求拿到用户数据也是非常重要的。Web框架都提供了自己的API来实现这些功能。Flask通过
request.form['name']
来获取表单的内容。
9、使用模板
由于在Python代码里拼字符串是不现实的,所以,模板技术出现了。
使用模板,我们需要预先准备一个HTML文档,这个HTML文档不是普通的HTML,而是嵌入了一些变量和指令,然后,根据我们传入的数据,替换后,得到最终的HTML,发送给用户:



这就是传说中的MVC:Model-View-Controller,中文名“模型-视图-控制器”。

Python处理URL的函数就是C:Controller,Controller负责业务逻辑,比如检查用户名是否存在,取出用户信息等等;
包含变量
{{ name }}
的模板就是V:View,View负责显示逻辑,通过简单地替换一些变量,View最终输出的就是用户看到的HTML。
MVC中的Model在哪?Model是用来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。

上面的例子中,Model就是一个
dict:
{ 'name': 'Michael' }

有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板里,写起来更有效率。

声明:学习廖雪峰的Python教程学习笔记,感谢Micheal Liao.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: