Flask应用开发

2015/04/15 Python Flask

Flask应用开发

Flask是一个使用Python编写的轻量级Web应用框架。

Flask简介

Flask框架诞生于2010年,其作者为Armin Ronacher。本来这个项目只是作者在愚人节的一个恶作剧,后来该框架受到了广大开发者的喜爱,进而成为一个正式的项目。

第一个Flask Web程序

Flask是一个基于Python语言的微型Web框架。之所以被称为微型,是因为其核心非常小,但是该Web框架简约而不简单,具有很强的扩展能力。 在Flask中输出Hello World

   # 从Flask框架中导入Flask类
from flask import Flask
   # 传入__name__初始化一个Flask实例
app = Flask(__name__)
   #这个路由将根URL映射到了hello_world函数上
@app.route('/')
def hello_world():                                         #定义视图函数
       return 'Hello World!'                          #返回响应对象
if __name__ == '__main__':
       #指定默认主机为是127.0.0.1,port为8888
       app.run(debug=True,host='0.0.0.0', port=8888)

所有的Flask程序都必须创建一个程序实例。Web服务器使用一种名为Web服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转给这个对象进行处理。

  • from flask import Flask这行代码表示从Flask框架中引入Flask对象。
  • app=Flask(__name__)这行代码表示传入__name__这个变量值来初始化Flask对象,Flask用这个参数确定程序的根目录,__name__代表的是这个模块本身的名称。
  • 使用route()装饰器注明通过什么样的URL可以访问函数,同时在函数中返回要显示在浏览器中的信息。@app.route(‘/’)这行代码指定了URL与Python函数的映射关系,我们把处理URL和函数之间关系的程序定义为路由,把被装饰的函数index()注册为路由,此处注册给index()函数的路由为根目录。
  • 系统初始化了,路由和视图函数有了,Flask程序如何运行呢?Flask程序的运行需要服务器环境,我们可以通过run方法来启动Flask自身集成的服务器。
  • 如果__name__=='__main__',就要启用Web服务来运行上面的程序,服务器一旦开启,就会进入轮询状态,等待并处理请求。在app.run()中可以传入一些参数,比如debug,app.run(debug=Ture),表示设置当前项目为debug模式,也就是调试模式。如果设置了调试模式,遇到程序有错误,会在控制台输出具体的错误信息,否则只会笼统地报告“应用服务器错误”的信息。另一方面,如果设置为调试模式,期间又修改了程序代码,系统会自动重新将修改的代码提交给Web服务器,你只需要确保浏览器没有缓存,便可以得到最新修改的代码结果。
  • app.run()还可以传入端口等信息,比如app.run(host=’0.0.0.0’,port=8080),host=’0.0.0.0’参数设置启用本机的IP地址可以访问,端口地址指定为8080,如果不指定,则为5000。

URL传递参数

Flask中如果要传递一个变量或者一个参数,可以通过表单和地址栏两种方式来传递。其中,通过浏览器地址栏URL方式传递/获取某个变量或参数使用得比较多。这样,我们可以使用相同的URL指定不同的参数,来访问不同的内容。

Flask通过URL传递参数,传递参数的语法是:’/<参数名>/'。需要注意两点:参数需要放在一对<>(尖括号)内;视图函数中需要设置同URL中相同的参数名。

   # 从Flask框架中导入Flask类
from flask import Flask
   # 传入__name__初始化一个Flask实例
app = Flask(__name__)
   #这个路由将根URL映射到了hello_world函数上
@app.route('/')
def hello_world():                                         #定义视图函数
       return 'Hello World!'                          #返回响应对象
@app.route('/user/<name>')            #定义路由,传递的参数名是name,因此
def hello_name(name):         #需要在函数的形参中定义同名的参数
       return "Hello World! %s" %name   #返回值
if __name__ == '__main__':
       #指定默认主机为是127.0.0.1,port为8888
       app.run(debug=True,host='0.0.0.0', port=8888)

请求路径 http://localhost:8888/user/yjj

URL请求

  • 需要导入request对象“from flask import request”,提交的请求的相关信息都在这个对象中了。
  • 在route中指定视图函数的请求接收方式:指定参数如“methods=[‘GET’, ‘POST’]”,methods参数的值是一个列表,在其中指定需要的请求方式即可,若没有指定则默认是GET,如果接收到的是POST请求,但却没有指定,则会报错。
  • get请求获取参数值:使用查询字符串的方式传递参数时,使用“request.args.get(‘param_name)’)”即可。
  • post请求获取参数值:使用form表单传递参数时,使用“request.form.get(‘param_name’)”即可,这个“param_name”是HTML中form表单元素的name属性的值,当然也需要在form中指定提交请求的方式为post“method=”POST””(特别注意在视图函数的route中也要指明post请求方式)。
  • 获取request请求方式:使用“request.method”即可,它的值为请求方式的全大写,比如“POST”。

URL反转

我们设定了一些函数访问URL。有时候,在作网页重定向或是模板文件时需要使用在视图函数中定义的URL,我们必须根据视图函数名称得到当前所指向的URL,这就是URL反转。下面通过一个实例来看URL反转的使用。

   # 从Flask框架中导入Flask类
from flask import Flask,url_for
   # 传入__name__初始化一个Flask实例
app = Flask(__name__)
   #这个路由将根URL映射到了hello_world函数上
@app.route("/")                                                        #定义路由
def index():                                                        #定义视图函数
      url1=(url_for('hello_name', name='yjj'))        #视图函数名为参数,进行反转
      return "URL反转内容为:%s" % url1                #返回反转的内容
@app.route('/user/<name>')            #定义路由,传递的参数名是name,因此
def hello_name(name):         #需要在函数的形参中定义同名的参数
       return "Hello World! %s" %name   #返回值
if __name__ == '__main__':
       #指定默认主机为是127.0.0.1,port为8888
       app.run(debug=True,host='0.0.0.0', port=8888)

输出

URL反转内容为:/user/yjj

使用URL反转,用到了url_for()函数,需要使用from flask import url_for导入,url_for()函数最简单的用法是以视图函数名作为参数,返回对应的URL。

页面跳转和重定向

用户在访问某个页面的时候,我们希望他登录后才能访问该页面,如果此时他没有登录,系统就让浏览器由当前页面跳转到登录页面,这里就涉及页面重定向问题。所谓页面重定向,就是用户在打开某个页面的时候,我们期望页面跳转到另一个指定的页面,让用户完成某种操作或执行某个动作。

Flask中提供了重定向函数redirect(),该函数的功能就是跳转到指定的URL。

   # 从Flask框架中导入Flask类
from flask import Flask,url_for,redirect
   # 传入__name__初始化一个Flask实例
app = Flask(__name__)
   #这个路由将根URL映射到了hello_world函数上
@app.route("/")                                                        #定义路由
def index():                                                        #定义视图函数
      url1=(url_for('user_login', name='yjj'))        #视图函数名为参数,进行反转
      return redirect(url1)               #返回反转的内容
@app.route('/login/<name>')            #定义路由,传递的参数名是name,因此
def user_login(name):         #需要在函数的形参中定义同名的参数
       return "login %s" %name   #返回值
if __name__ == '__main__':
       #指定默认主机为是127.0.0.1,port为8888
       app.run(debug=True,host='0.0.0.0', port=8888)

重定向是将原本的URL重新定向成为一个新的URL,可以实现页面的跳转。Flask中使用到了redirect()函数,需要使用from flask import redirect将其导入才能使用。这里输入地址访问的首先应该是index()这个视图函数,但是index()这个视图函数直接跳转到了user_login视图上

Jinja 2模板引擎

模板实质上是一个静态的包含HTML语法的全部或片段的文本文件,也可包含由变量表示的动态部分。使用真实值替换网页模板中的变量,生成对应数据的HTML片段,这一过程称为渲染。Flask提供了Jinja 2模板引擎来渲染模板。

Search

    微信好友

    博士的沙漏

    Table of Contents