Web框架

Web框架

  1. Bottlehtml

    Bottle是一個快速、簡潔、輕量級的基於WSIG的微型Web框架,此框架只有一個 .py 文件,除了Python的標準庫外,其不依賴任何其餘模塊。前端

    建立項目python

    from bottle import template, Bottle
    
    root = Bottle()
    
    @root.route('/hello/')
    def index():
        return '<b>Hello World!</b>'
    
    root.run(host='localhost', port=8080, debug=True)

    詳情請看轉載連接:https://www.cnblogs.com/wupeiqi/articles/5341480.htmlweb

  2. flask數據庫

    Flask是一個基於Python開發而且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,而後觸發Flask框架,開發人員基於Flask框架提供的功能對請求進行相應的處理,並返回給用戶,若是要返回給用戶複雜的內容時,須要藉助jinja2模板來實現對模板的處理,即:將模板和數據進行渲染,將渲染後的字符串返回給用戶瀏覽器。flask

    「微」(micro) 並不表示你須要把整個 Web 應用塞進單個 Python 文件(雖然確實能夠 ),也不意味着 Flask 在功能上有所欠缺。微框架中的「微」意味着 Flask 旨在保持核心簡單而易於擴展。Flask 不會替你作出太多決策——好比使用何種數據庫。而那些 Flask 所選擇的——好比使用何種模板引擎——則很容易替換。除此以外的一切都由可由你掌握。如此,Flask 能夠與您珠聯璧合。後端

    默認狀況下,Flask 不包含數據庫抽象層、表單驗證,或是其它任何已有多種庫能夠勝任的功能。然而,Flask 支持用擴展來給應用添加這些功能,如同是 Flask 自己實現的同樣。衆多的擴展提供了數據庫集成、表單驗證、上傳處理、各類各樣的開放認證技術等功能。Flask 也許是「微小」的,但它已準備好在需求繁雜的生產環境中投入使用。瀏覽器

    路由映射的方式
    • @app.route('/user/ ')
    • @app.route('/post/int:post_id')
    • @app.route('/post/float:post_id')
    • @app.route('/post/path:path')
    • @app.route('/login', methods=['GET', 'POST'])
    獲取用戶請求相關的信息
    • request.method
    • request.args
    • request.form
    • request.values
    • request.files
    • request.cookies
    • request.headers
    • request.path
    • request.full_path
    • request.script_root
    • request.url
    • request.base_url
    • request.url_root
    • request.host_url
    • request.host
    Flask框架九大基礎功能
    # 後端代碼
    from flask import Flask, render_template, request, make_response, redirect, session
    # 1.靜態文件和模板路徑匹配
    app = Flask(__name__)
    
    
    # 5.自定製前端模板函數
    def text():
        return '<a href="#">連接</a>'
    
    
    @app.route('/', methods=['GET', 'POST'])
    def hello_world():
        # 7.獲取請求內容,及請求方法
        print(request.args)
        # 3.返回字符串
        # return 'Hello World!'
        # 4.返回模板
        return render_template('index.html',
                               k1='root',
                               k2=[1, 2, 3],
                               k3={'name': 'eric', 'pwd': '1234'},
                               k4=text)
        # 8.響應額外的數據
        # resp = make_response(render_template('index.html',
        #                                      k1='root',
        #                                      k2=[1, 2, 3],
        #                                      k3={'name': 'eric', 'pwd': '1234'},
        #                                      k4=text))
        # resp.set_cookie('username', 'the name')
        # return resp
        # 9.重定向,相似於Django的reverse功能:url_for
        # return redirect('/hello/about')
        # url = url_for('hello', 'about')
        # return redirect(url)
        # 10.Session:你能夠理解成咱們用瀏覽器上網,到關閉瀏覽器的這一過程。session是會話過程當中,服務器用來記錄特定用戶會話的信息。
    
    # 6.路由映射
    # -   @app.route('/user/<username>')
    # -   @app.route('/post/<int:post_id>')
    # -   @app.route('/post/<float:post_id>')
    # -   @app.route('/post/<path:path>')
    # -   @app.route('/login', methods=['GET', 'POST'])
    # 以hello爲路徑頭後面接括號中的:about,help,imprint,class,"foo, bar"這幾個參數發送請求
    @app.route('/hello/<any(about,help,imprint,class,"foo, bar"):page_name>')
    def hello(page_name):
        return page_name
    
    
    if __name__ == '__main__':
        # 2.IP和端口的配置:默認端口5000
        app.run()
    <!-- 前端代碼塊 -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h2>Hello world!</h2>
    {{ k1 }}
    {{ k2 }}
    <ul>
    {% for item in k2 %}
    <li>{{ item }}</li>
    {% endfor %}
    </ul>
    {{ k3 }}
    <ul>
    {% for key,value in k3.items() %}
    <li>{{ key }}:{{ value }}</li>
    {% endfor %}
    </ul>
    {{ k4() | safe }}
    </body>
    </html>
    自定製中間件

    相似於頁面的錯誤提示能夠用到這個中間件服務器

    # Author:wylkjj
    # Date:2020/2/28
    # -*- coding:utf-8 -*-
    from flask import Flask
    app = Flask(__name__)
    
    
    @app.route('/index/', methods=['GET', 'POST'])
    def hello_world():
        print('...')
        return 'OK'
    
    
    def my_wsgi_app(environ, start_response):
        print('my_wsgi_app')
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [bytes('<h1>Hello</h1>', encoding='utf-8'), ]
    
    
    class Foo:
        def __init__(self, w):
            self.w = w
    
        def __call__(self, environ, start_response):
            obj = self.w(environ, start_response)
            return obj
    
    
    if __name__ == '__main__':
        # app.wsgi_app = my_wsgi_app
        # 11.自定製中間件
        app.wsgi_app = Foo(app.wsgi_app)
        app.run()
    Message

    message是一個基於Session實現的用於保存數據的集合,其特色是:使用一次就刪除cookie

    from flask import Flask, flash, render_template, request,get_flashed_messages
    app = Flask(__name__)
    
    
    @app.route('/')
    def index1():
        # 12. 獲取消息
        v = get_flashed_messages()
        print(v)
        return render_template('s4.html')
    
    
    @app.route('/set')
    def index2():
        v = request.args.get('p')
        # 13. 設置消息
        flash('kkkk')
        return 'ok'
    
    
    if __name__ == "__main__":
        app.run()
  3. tornado

    Tornado 是 FriendFeed 使用的可擴展的非阻塞式 web 服務器及其相關工具的開源版本。這個 Web 框架看起來有些像web.py 或者 Google 的 webapp,不過爲了能有效利用非阻塞式服務器環境,這個 Web 框架還包含了一些相關的有用工具 和優化。

    Tornado 和如今的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,並且速度至關快。得利於其 非阻塞的方式和對 epoll 的運用,Tornado 每秒能夠處理數以千計的鏈接,這意味着對於實時 Web 服務來講,Tornado 是一個理想的 Web 框架。咱們開發這個 Web 服務器的主要目的就是爲了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用裏每個活動用戶都會保持着一個服務器鏈接。(關於如何擴容 服務器,以處理數以千計的客戶端的鏈接的問題,請參閱 C10K problem。)

    基本流程

    第一步:執行腳本,監聽 8888 端口

    第二步:瀏覽器客戶端訪問 /index --> http://127.0.0.1:8888/index

    第三步:服務器接受請求,並交由對應的類處理該請求

    第四步:類接受到請求以後,根據請求方式(post / get / delete ...)的不一樣調用並執行相應的方法

    第五步:方法返回值的字符串內容發送瀏覽器

    調用方法,框架的基本建立
    import tornado.ioloop
    import tornado.web
      
      
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write("Hello, world")
      
    application = tornado.web.Application([
        (r"/index", MainHandler),
    ])
      
      
    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()
  4. 模板語言:(Django和jinja2語言類似)

    • Django模板語言: ORM,模板語言
    • Jinja2: 模板引擎
    • bootle模板語言
  5. 三大組件

    • 路由系統
    • 控制器(含模板渲染)
    • 數據庫操做
  6. 微型框架

    • 依賴第三方寫的socket,遵循WSGI規範
    • 自己功能少
  7. 安裝

    • pip install bottle
    • pip install flask
    • pip install tornado
  8. 路由映射大約可分爲三種:

    • Django的路由映射是一種:path = [ '/index/' , view.index ]

    • bottle的路由映射也是一種:

      @route

      def func():

      ​ pass

    • 最厲害的第三種:

      url = ( [ ' /?P \w+/ /?P \w+' ] )

      / acount / login

      acount.py

      ​ login方法

Web組件的定製

  1. Session
  2. Form組件
相關文章
相關標籤/搜索