zoukankan      html  css  js  c++  java
  • python16_day38【flask】

    一、简介

      Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

    “微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask 可以与您珠联璧合。

    默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

    pip3 install flask
    
    from werkzeug.wrappers import Request, Response
    
    @Request.application
    def hello(request):
        return Response('Hello World!')
    
    if __name__ == '__main__':
        from werkzeug.serving import run_simple
        run_simple('localhost', 4000, hello)  
    

      

    二、基本使用

      

    from flask import Flask
    app = Flask(__name__)
     
    @app.route('/')
    def hello_world():
        return 'Hello World!'
     
    if __name__ == '__main__':
        app.run()
    

    三、路由系统

    @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'])
    

      

    DEFAULT_CONVERTERS = {
        'default':          UnicodeConverter,
        'string':           UnicodeConverter,
        'any':              AnyConverter,
        'path':             PathConverter,
        'int':              IntegerConverter,
        'float':            FloatConverter,
        'uuid':             UUIDConverter,
    }
    

     

    四、模板

      1. Flask使用的是Jinja2模板,所以其语法和Django无差别

      2. 自定义模板方法(simple_tag)

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>自定义函数</h1>
        {{ww()|safe}}
    
    </body>
    </html>
    

      

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from flask import Flask,render_template
    app = Flask(__name__)
     
     
    def wupeiqi():
        return '<h1>Wupeiqi</h1>'
     
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        return render_template('login.html', ww=wupeiqi)
     
    app.run()
    

    五、请求与响应

     1 from flask import Flask
     2     from flask import request
     3     from flask import render_template
     4     from flask import redirect
     5     from flask import make_response
     6 
     7     app = Flask(__name__)
     8 
     9 
    10     @app.route('/login.html', methods=['GET', "POST"])
    11     def login():
    12 
    13         # 请求相关信息
    14         # request.method
    15         # request.args
    16         # request.form
    17         # request.values
    18         # request.cookies
    19         # request.headers
    20         # request.path
    21         # request.full_path
    22         # request.script_root
    23         # request.url
    24         # request.base_url
    25         # request.url_root
    26         # request.host_url
    27         # request.host
    28         # request.files
    29         # obj = request.files['the_file_name']
    30         # obj.save('/var/www/uploads/' + secure_filename(f.filename))
    31 
    32         # 响应相关信息
    33         # return "字符串"
    34         # return render_template('html模板路径',**{})
    35         # return redirect('/index.html')
    36 
    37         # response = make_response(render_template('index.html'))
    38         # response是flask.wrappers.Response类型
    39         # response.delete_cookie('key')
    40         # response.set_cookie('key', 'value')
    41         # response.headers['X-Something'] = 'A value'
    42         # return response
    43 
    44 
    45         return "内容"
    46 
    47     if __name__ == '__main__':
    48         app.run()
    View Code

     六、Session

      除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。

      设置:session['username'] = 'xxx'

      删除:session.pop('username', None)

     1 from flask import Flask, session, redirect, url_for, escape, request
     2  
     3 app = Flask(__name__)
     4  
     5 @app.route('/')
     6 def index():
     7     if 'username' in session:
     8         return 'Logged in as %s' % escape(session['username'])
     9     return 'You are not logged in'
    10  
    11 @app.route('/login', methods=['GET', 'POST'])
    12 def login():
    13     if request.method == 'POST':
    14         session['username'] = request.form['username']
    15         return redirect(url_for('index'))
    16     return '''
    17         <form action="" method="post">
    18             <p><input type=text name=username>
    19             <p><input type=submit value=Login>
    20         </form>
    21     '''
    22  
    23 @app.route('/logout')
    24 def logout():
    25     # remove the username from the session if it's there
    26     session.pop('username', None)
    27     return redirect(url_for('index'))
    28  
    29 # set the secret key.  keep this really secret:
    30 app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
    基本使用

    七、蓝图

      蓝图用于为应用提供目录划分:

       

      • 蓝图URL前缀:xxx = Blueprint('account', __name__,url_prefix='/xxx')
      • 蓝图子域名:xxx = Blueprint('account', __name__,subdomain='admin')
        # 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
        # 访问时:admin.wupeiqi.com:5000/login.html

    八、message

      message是一个基于Session实现的用于保存数据的集合,其特点是:使用一次就删除。

    九、中间件

     1 from flask import Flask, flash, redirect, render_template, request
     2  
     3 app = Flask(__name__)
     4 app.secret_key = 'some_secret'
     5  
     6 @app.route('/')
     7 def index1():
     8     return render_template('index.html')
     9  
    10 @app.route('/set')
    11 def index2():
    12     v = request.args.get('p')
    13     flash(v)
    14     return 'ok'
    15  
    16 class MiddleWare:
    17     def __init__(self,wsgi_app):
    18         self.wsgi_app = wsgi_app
    19  
    20     def __call__(self, *args, **kwargs):
    21  
    22         return self.wsgi_app(*args, **kwargs)
    23  
    24 if __name__ == "__main__":
    25     app.wsgi_app = MiddleWare(app.wsgi_app)
    26     app.run(port=9999)
    View Code

    十、Flask插件

      1. WTForms表单

      2. SQLAchemy ORM

      3. 更多

  • 相关阅读:
    高级(线性)素数筛
    Dijkstra(迪杰斯特拉)算法
    简单素数筛
    【解题报告】 POJ1958 奇怪的汉诺塔(Strange Tower of Hanoi)
    4 jQuery Chatting Plugins | jQuery UI Chatbox Plugin Examples Like Facebook, Gmail
    Web User Control Collection data is not storing
    How to turn on IE9 Compatibility View programmatically in Javascript
    从Javascrip 脚本中执行.exe 文件
    HtmlEditorExtender Ajax
    GRIDVIEW模板中查找控件的方式JAVASCRIPT
  • 原文地址:https://www.cnblogs.com/weibiao/p/7767259.html
Copyright © 2011-2022 走看看