Python Web开发

参考原文

  Python廖雪峰html

WSGI接口

  WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的创建链接,HTTP原始请求和响应格式等)。WSGI接口定义很是简单,只须要Web开发者实现一个函数,就能够响应客户端的HTTP请求python

  这个函数有两个参数:environ:包含全部的HTTTP请求的dict对象;start_response:一个发送HTTP响应的函数。flask

这两个参数,咱们是没有办法提供的,是须要符合WSGI规范的服务器来提供的。浏览器

  Python内置了一个WSGI服务器,这个模块就wsgiref,是用纯Python编写的,不考虑任何的运行效率,仅供开发和测试使用。接下来,咱们就来实现一个基本的响应请求的处理。服务器

  首先,编写hello.py,用于实现Web应用程序的WSGI处理函数:app

#hello.py

def application(environ, start_response):
    #返回响应的首部
    start_response('200 OK',[('Content-Type', 'text/html')])
    #返回响应的主体
    return [b'<h1>Hello,world<h1>']

  再编写一个server.py,用于启动WSGI服务器,加载application()函数:框架

#server.py
#导入响应的模块函数:
from wsgiref.simple_server import make_server
#导入先前编写的application函数:
from hello import application

#建立一个服务器,IP地址为空,渡口是8000,处理函数是application
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
#开始监听HTTP请求:
httpd.serve_forever()

  在终端运行server.py,并在浏览器输入地址:localhost:8000,效果以下图:ide

  在命令行能够看到wsgiref打印的log:函数

 

  咱们也能够根据environ里的参数信息,来生成动态的HTML。工具

   总结:不管多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的全部输入信息均可以经过environ得到,HTTP响应的输出均可以经过start_response()加上函数返回值做为Body。

使用Web框架

  了解了WSGI框架,咱们发现:其实一个WebAPP,就是一个WSGI的处理函数,针对每一个HTTP请求进行响应。可是WSGI抽象程度仍是比较低,咱们可使用Web框架来实现WebAPP。

  Python中的Web框架很是多,咱们先直接选择一个比较流行的Web框架——Flask来使用。

  首先使用pip(Python包管理工具)来安装Flask

sudo apt install python-pip #安装pip

pip install flask  #安装flask

  而后编写一个app.py,处理3个URL请求,分别是

  • GET / : 首页,返回Home页
  • GET /signin : 登录页,显示登录表单,用于用户登录
  • POST /signin : 处理用户输入的登录表单,返回登录结果

  Flask经过Python的装饰器在内部自动地把URL和函数给关联起来,因此咱们写出的代码应该这样:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def home():
    return '<h1>Home</h1>'

@app.route('/signin', methods=['GET'])
def signin_form():
    return '''<form action="/signin" method="post">
            <p><input name="username" type="text"></p>
            <p><input name="password" type="password"></p>
            <p><input type="submit" value="Sign In"></p>
            </form>
            '''

@app.route('/signin', methods=['POST'])
def signin():
    if request.form['username'] =='admin' and request.form['password'] =='password':
        return '<h3>Hello,admmin!</h3>'
    return '<h3>Bad username or password!</h3>'

if __name__ == '__main__':
    app.run()
View Code

   运行python  app.py,Flask自带的server在端口5000上监听:

  打开浏览器,输入首页地址:http://localhost:5000/

  继续输入http://localhost:5000/signin:

 

  输入预设的用户名admin和密码password,登陆成功:

  输入错误的信息:

  

相关文章
相关标签/搜索