zoukankan      html  css  js  c++  java
  • Flask 快速学习笔记

    Flask 快速学习笔记

    学习原因

    因项目需要自动化处理大量mysql数据,考虑后期,展示页面,进行快速的数据分析。
    

    环境

    • 安装条件

      安装Flask通常需要Python 2.6或更高版本。虽然Flask及其依赖项适用于Python 3(Python 3.3以上版本),但是许多Flask扩展不能正确支持它。因此,建议在Python 2.7上安装Flask。

    • windows

      python -m pip install Flask
      
    • linux

      sudo apt-get install virtualenv #为了创建虚拟环境
      pip install Flask
      

    应用

    • demo

      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/') #route 为装饰器,告诉程序 URL应该调用哪个函数
      #app.route(url,options)
      # url 该函数绑定的url
      # options 转发参数列表
      def hello_world():
         return 'Hello 0xdd’
      
      if __name__ == '__main__':
         app.run()
      
    • app.run

    app.run(host, port, debug, options)
    #options 要转发到底层的Werkzeug服务器。
    
    • debug
    app.debug = True
    app.run()
    app.run(debug = True)
    
    # 为什么要开DEBUG模式
    
    # 通过调用run()方法启动Flask应用程序。但是,当应用程序正在开发中时,应该为代码中的每个更改手动重新启动它。为避免这种不便
    

    路由

    • 绑定方式1

      @app.route(‘/hello’)
      def hello_world():
         return ‘hello world’
      
      example:
          URL: http://127.0.0.1/hello   # 访问URL执行hello_word函数
      
    • 绑定方式2

      def hello_world():
         return ‘hello world’
      app.add_url_rule(‘/’, ‘hello’, hello_world)
      

    变量规则

    • demo1

      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/hello/<name>')
      def hello_name(name):
         return 'Hello %s!' % name
      
      if __name__ == '__main__':
         app.run(debug = True)
      
      example:
          URL: http://127.0.0.1/hello/0xdd   # 访问URL执行hello_name函数 
      
       #resualt:
         Hello 0xdd
              
      
    • demo2

      #转换器构建规则 int float path   默认为子覅穿变量
      
      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/blog/<int:postID>')       #int   转换
      def show_blog(postID):
         return 'Blog Number %d' % postID
      
      @app.route('/rev/<float:revNo>')   	   #float 转换
      def revision(revNo):
         return 'Revision Number %f' % revNo
      
      if __name__ == '__main__':
         app.run()
      

    Flask的URL规则基于Werkzeug的路由模块。这确保形成的URL是唯一的,并且基于Apache规定的先例。

    URL构建

    • url_for 函数对于动态构建特定函数的URL非常有用。该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。

    • demo1

      from flask import Flask, redirect, url_for #redirect 重定向   url_for 动态函数调用,传参。
      app = Flask(__name__)
      @app.route('/admin')
      def hello_admin():
         return 'Hello Admin'
      
      
      @app.route('/guest/<guest>')  
      def hello_guest(guest):
         return 'Hello %s as Guest' % guest
      
      
      @app.route('/user/<name>')
      def hello_user(name):  
         if name =='admin':  #通过用户名 进行权限判断 分类
            return redirect(url_for('hello_admin'))  #权限为admin,进行重定向跳转到指定函数
         else:
            return redirect(url_for('hello_guest',guest = name)) 
                                         #guest为hello_guest 接收值,传参名需保持与接收参数名相同
      
      if __name__ == '__main__':
         app.run(debug = True)
      
      

    HTTP方法

    • http 方法

      1. GET     #以未加密的形式将数据发送到服务器。最常见的方法。
      2. HEAD    #和GET方法相同,但没有响应体。
      3. POST    #用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。
      4. PUT 	   #用上传的内容替换目标资源的所有当前表示。
      5. DELETE  #删除由URL给出的目标资源的所有当前表示。
      
    • Flask路由默认响应GET 请求,通过route()装饰器提供方法参数

    from flask import Flask, redirect, url_for, request
    app = Flask(__name__)
    @app.route('/success/<name>')
    def success(name):
       return 'welcome %s' % name
    
    @app.route('/login',methods = ['POST', 'GET'])
    def login():
       if request.method == 'POST':
          user = request.form['nm']
          return redirect(url_for('success',name = user))
       else:
          user = request.args.get('nm')
          return redirect(url_for('success',name = user))
    
    if __name__ == '__main__':
       app.run(debug = True)
    
    • request 传参

      #from flask import Flask,request
      user = request.form['nm']  #POST接收
      user = request.arg.get['nm']  #GET传参
      #args是包含表单参数对及其对应值对的列表的字典对象。
      

    模板

    利用Flask所基于的Jinja2模板引擎的地方。而不是从函数返回硬编码HTML,可以通过render_template()函数呈现HTML文件。

    • demo1
    from flask import Flask,render_template
    
    app = Flask(name)
    
    @app.route('/')
    def index():
      return render_template(‘hello.html’) #Flask将尝试在templates文件夹中找到HTML文件
    
    
    if name == 'main':
      app.run(debug = True)
    

    目录结构

    Application folder
    	Hello.py
    	templates
    		hello.html
    
    • demo 2

      • hello.html

        <!doctype html>
        
        
           
        
        
          <h1>Hello {{ name }}!</h1>
           
        
      • main.py

      from flask import Flask, render_template
      app = Flask(name)
      @app.route('/hello/')
      def hello_name(user):
         return render_template('hello.html', name = user) # 与模板name传参
      
      
      if name == 'main':
         app.run(debug = True)
      
    Jinja2模板

    1.{% ... %}用于语句 2.{{ ... }}用于表达式可以打印到模板输出

    3.{# ... #}用于未包含在模板输出中的注释

    4.# ... ##用于行语句

    • demo1
      {% if marks>50 %}
      <h1> Your result is pass!</h1>
      {% else %}
      <h1>Your result is fail</h1>
      {% endif %}
    
    • demo 2
    <!-- result.html -->
      <table border = 1>
         {% for key, value in result.iteritems() %}
    
        &lt;tr&gt;
           &lt;th&gt; {{ key }} &lt;/th&gt;
           &lt;td&gt; {{ value }} &lt;/td&gt;
        &lt;/tr&gt;
     {% endfor %}
      </table>
    
    
    from flask import Flask, render_template
    app = Flask(name)
    @app.route('/result')
    def result():
       dict = {'phy':50,'che':60,'maths':70}
       return render_template('result.html', result = dict)
    
    
    if name == 'main':
       app.run(debug = True)
    

    Flask静态文件

    • demo
    <!-- index.html -- >
    <html>
    
       <head>
          <script type = "text/javascript" 
             src = "{{ url_for('static', filename = 'hello.js') }}" ></script>
       </head>
       
       <body>
          <input type = "button" onclick = "sayHello()" value = "Say Hello" />
       </body>
       
    </html>
    
    //hello.js
    function sayHello() {
       alert("Hello World")
    }
    
    # main.py
    from flask import Flask, render_template
    app = Flask(__name__)
    
    @app.route("/")
    def index():
       return render_template("index.html")
    
    if __name__ == '__main__':
       app.run(debug = True)
    

    Request 对象

    Request对象的重要属性如下所列:

    • Form - 它是一个字典对象,包含表单参数及其值的键和值对。

    • args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。

    • Cookies - 保存Cookie名称和值的字典对象。

    • files - 与上传文件有关的数据。

    • method - 当前请求方法。

    后续

    暂时学到这里,刚好项目够用。后续有空继续回来玩Flask。(顺便看看Flask的洞玩玩)

  • 相关阅读:
    10 款高质量的 jQuery 表单验证插件
    [论文收集] CHI 2011 Workshop on Crowdsourcing and Human Computation
    [论文笔记] Evaluation on crowdsourcing research: Current status and future direction (Information Systems Frontiers, 2012) (第二部分)
    [论文笔记] Human computation tasks with global constraints (CHI, 2012)
    [论文笔记] Designing Games With A Purpose (CACM, 2008)
    [论文笔记] Live Migration of Virtual Machines (NSDI, 2005)
    [论文笔记] Evaluation on crowdsourcing research: Current status and future direction (Information Systems Frontiers, 2012) (第一部分)
    [论文笔记] MoneyBee: Towards enabling a ubiquitous, efficient, and easytouse mobile crowdsourcing service … (Bell Labs Technical Journal, 2011)
    [论文笔记] Anatomy of a crowdsourcing platform Using the example of microworkers.com (IMIS, 2011)
    [论文笔记] Task search in a human computation market (HCOMP, 2010)
  • 原文地址:https://www.cnblogs.com/0xdd/p/13172630.html
Copyright © 2011-2022 走看看