Python || Web框架

2017-02-13  本文已影响31人  有个水友

一、仅使用WSGI接口的限制

本质上,写一个Web App就是写一个WSGI处理函数(根据请求的内容,生成相应的HTML代码),然后利用符合WSGI规范的服务器调用处理函数,完成对每个请求的响应。(隐藏了HTTP原始请求和响应、HTTP请求的解析)

如何请求的问题结局后,怎么处理不同的URL、相同URL的不同请求类型(POSTGETHEADDELETE等)仍待解决。

简单的想法是:挨个判断传入的HTTP请求的URL及请求类型

def application(environ, start_response):
  method = environ["REQUEST_METHOD"]
  path = environ["PATH_INFO"]
  #根据请求的类型及路径,分别执行不同的处理函数
  if method=="GET" and path=="/":
    return handle_home(environ, start_response)
  if method=="POST" and path=="/signin":
    return handle_signin(environ, start_response)
  ...

但是这样有个明显的缺点,当逻辑复杂后,代码很难维护。需要在WSGI接口的基础上,再抽象出一个函数专注于处理URL,而URL到与之对应处理函数之间的映射由Web框架来实现。

二、使用Flask开发一个简单的Web App

功能:处理三个URL

from flask import Flask
from flask import request
app = Flask(__name__)
#======================================================================
#主页
@app.route('/', methods=["GET", "POST"])
def home():
    return "<h1>Hello, in my home!</h1>"
#======================================================================
#表单页
@app.route("/signin", methods=["GET"])
def signin_form():
    return '''<form action="/signin" method="POST">
              <p><input name="username"></p>    
              <p><input name="password" type="password"></p>
              <p><button type="submit">Sign In</button></p>
              </form>
           '''
#======================================================================
#登录页
@app.route("/signin", methods=["POST"])
def signin():
    #get information from object request
    if request.form['username'] == "admin" and request.form['password'] == "password":
        return "<h3>Hello admin!</h3>"
    return "<h3>Bad username or password</h3>"
#======================================================================
#启动服务
if __name__ == "__main__":
    app.run()
上一篇下一篇

猜你喜欢

热点阅读