Python简单Web开发

WSGI介绍

HTTP协议和HTML的介绍不在这里说明,可以去看廖雪峰老师的教程了解这方面内容。

一个web应用的本质是:

  • 浏览器发送一个HTTP请求
  • 服务器收到请求,生成一个HTML文档
  • 服务器把HTML文档作为HTTP响应的Body发送给浏览器
  • 浏览器收到HTTP响应,从HTTP响应Body中取出HTML并显示

最简单的web应用就是先把HTML保存好,然后需要时直接响应给HTTP请求。
对Python而言,正确的做法是底层代码由专门的服务器软件实现,我们只需用Python专注于生成HTML文档即可。
Python提供了同一的接口WSGIWeb Server Gateway Interface让我们去专注于如何生成HTML文档。

接口非常简单,它要求web开发者实现一个函数,就是响应HTTP请求。如下所示。

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, web!</h1>']

environ 是包含所有HTTP请求信息的dict对象。
start_response 是发送HTTP响应的函数。start_response用于发送HTTP响应Header, 只能发送一次, 接收两个参数, 第一个参数是响应码, 第二个参数是响应Header

我们需要一个WSGI服务器来测试我们上面写的代码。Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。

# -*- coding: UTF-8 -*-


def application(environ, start_response):
    """
    environ 是包含所有HTTP请求信息的dict对象
    start_response 是发送HTTP响应的函数
    start_response用于发送HTTP响应Header, 只能发送一次, 接收两个参数, 第一个参数是响应码, 第二个参数是响应Header
    :param environ:
    :param start_response:
    :return:
    """

    # HTTP请求信息也放在environ里, 只不过有HTTP_前缀 如HTTP_USER_AGENT
    # print(environ)
    print("JAVA_HOME={}".format(environ.get("JAVA_HOME")))
    print("USER_AGENT={}".format(environ.get("HTTP_USER_AGENT")))
    # 发送HTTP Response Header
    start_response('200 OK', [('Conten-Type', 'text/html')])
    content = '<h1>hello {} on web!</h1>'.format(environ.get("USERNAME"))
    return [content.encode()]


from wsgiref.simple_server import make_server
# 创建服务器
httpd = make_server("localhost", 8080, application)
print("Serving HTTP on port 8080 ...")
# 开始监听HTTP请求
httpd.serve_forever()

在这里插入图片描述
在这里插入图片描述

Flask框架简单使用

介绍了如何定义url对应的处理方法、如何传参、如何重定向、如何接收和发送json数据。
更详细内容可以参考W3CSchool教程

# -*- coding: UTF-8 -*-


from flask import Flask, redirect, url_for, request

app = Flask(__name__)


@app.route('/')
def index():
    content = {"code": "ok", "msg": "Hello World"}
    return content


@app.route('/index.html')
def index_html():
    return "<h1>hello everyone</h1>"


@app.route('/hello/<name>')
def hello(name):
    return "hello {}".format(name)


@app.route('/blog/<int:id>')
def blog(id):
    return "the blog id is %s" % id


@app.route('/money/<float:money>')
def money(money):
    return "the money is %s" % money


@app.route('/admin')
def hello_admin():
   return 'Hello Admin'


@app.route('/guest/<guest>')

def hello_guest(guest):
   return 'Hello %s as Guest' % guest

# 重定向
@app.route('/user/<name>')
def hello_user(name):
   if name =='admin':
      return redirect(url_for('hello_admin'))
   else:
      return redirect(url_for('hello_guest',guest = name))


@app.route("/stu/add", methods=['POST'])
def add():
    print(request.get_data())
    # 获取json数据
    print(request.get_json())
    return "ok"


app.run(host="192.168.10.44", port=8080, debug=True)



参考网址

廖雪峰老师的Python教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章