zoukankan      html  css  js  c++  java
  • Python Web开发

    参考原文

      Python廖雪峰

    WSGI接口

      WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的建立连接,HTTP原始请求和响应格式等)。WSGI接口定义非常简单,只需要Web开发者实现一个函数,就可以响应客户端的HTTP请求

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

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

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

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

    #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,效果如下图:

      在命令行可以看到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,登录成功:

      输入错误的信息:

      

      

  • 相关阅读:
    phpqrcode生成带logo的二维码图片及带文字的二维码图片
    php 文件压缩zip扩展
    js常用的正则表达操作
    WebViewJavascriptBridge详细使用(转载)
    html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法(转载)
    js面向对象的实现(example 二)
    PHP二维数组(或任意维数组)转换成一维数组的方法汇总
    Yii2实现自定义独立验证器的方法
    yii2.0配置以pathinfo的形式访问
    安装 AdminLTE和 yii2-admin
  • 原文地址:https://www.cnblogs.com/yunche/p/9053589.html
Copyright © 2011-2022 走看看