Python Web开发——学习笔记

1、Web应用开发可以说是目前软件开发中最重要的部分。Web开发也经历了好几个阶段:
  1. 静态Web页面:由文本编辑器直接编辑并生成静态的HTML页面,如果要修改Web页面的内容,就需要再次编辑HTML源文件,早期的互联网Web页面就是静态的;
  2. CGI:由于静态Web页面无法与用户交互,比如用户填写了一个注册表单,静态Web页面就无法处理。要处理用户发送的动态数据,出现了Common Gateway Interface,简称CGI,用C/C++编写。
  3. ASP/JSP/PHP:由于Web应用特点是修改频繁,用C/C++这样的低级语言非常不适合Web开发,而脚本语言由于开发效率高,与HTML结合紧密,因此,迅速取代了CGI模式。ASP是微软推出的用VBScript脚本编程的Web开发技术,而JSP用Java来编写脚本,PHP本身则是开源的脚本语言。
  4. 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')])   第二个参数是一个listlist里每一个元素是一个tuple
    body = r"<h1>hello %s </h1>" % (environ['PATH_INFO'][1:] or 'web')   #body的内容只需要是HTMLbody的内容,不需要<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标签里别忘了写actionmethod

@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 5000flask自带的端口号

有了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.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值