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的洞玩玩)

原文地址:https://www.cnblogs.com/0xdd/p/13172630.html