Flask实例教程三

一:Flask中url的工作方式

# encoding=utf-8
from flask import Flask

app = Flask(__name__)

@app.route("/task/")
def task_list():
    return "List of all task"

@app.route("/task/<int:task_id>/")
def task_detail(task_id):
    return "Detail of task#{}.".format(task_id)

@app.route("/task/<int:task_id>/edit/",methods=[‘GET‘,‘POST‘])
def task_edit(task_id):
    return ‘From to edit task#{}.‘.format(task_id)

@app.route("/task/create/",methods=[‘GET‘,‘POST‘])
def task_create():
    return "Create New Task"

@app.route("/task/<int:task_id>/delete/",methods=[‘DELETE‘])
def task_delete(task_id):
    raise NotImplementedError(‘DELETE‘)

上面列出一些url装饰器操纵,下面通过浏览器访问相应的url就会触发相应的操作。

/task/<int:task_id> 将匹配/task/任意个数字这样的模式,并且url相应的数字将会赋值给task_id。

methods=[‘GET‘,‘POST‘] 代表这个url装饰器只接受GET和POST两种请求方式,默认只接受GET请求。

当使用delete方法的时候会触发NotImplementError错误。

二:URL构建

flask中任何一个url都需要自己来构建不是自动生成的,比如我想连接一个css文件,这个文件的路径可能是
static/style.css,但是flask是不允许直接使用这个路径的,需要构建这个url。flask提供了url_for来构建url。通过
app.route装饰器也可以构建url但是这需要关联一个function。url_for只用于建立一个url。

下面来看下url_for的几个例子:

# encoding=utf-8
from flask import Flask
from flask import url_for

app = Flask(__name__)

@app.route("/task/<int:task_id>/edit/",methods=[‘GET‘,‘POST‘])
def task_edit(task_id):
    return ‘From to edit task#{}.‘.format(task_id)

@app.route(‘/task/<int:task_id>/‘)
def task_detail(task_id):
    edit_url = url_for(‘task_edit‘,task_id=task_id)
    return edit_url

对于url_for()函数来说,第一个参数叫做endpoint,默认是包裹在app.route装饰器里面的函数名字,也可以通过endpoint来修改:

看如下例子:

# encoding=utf-8
from flask import Flask
from flask import url_for

app = Flask(__name__)

@app.route("/task/<int:task_id>/edit/",methods=[‘GET‘,‘POST‘],endpoint=‘aliasname‘)
def task_edit(task_id):
    return ‘From to edit task#{}.‘.format(task_id)

@app.route(‘/task/<int:task_id>/‘)
def task_detail(task_id):
    edit_url = url_for(‘aliasname‘,task_id=task_id)
    return edit_url

给task_edit的装饰器加入了endpoint的参数,task_detail就可以使用endpoint来构建url

默认情况下用户输入一个url例如http://127.0.0.1/***/*** 最后不带‘/‘ 的url,flask都会在末尾添加上‘/‘

所以装饰器中的url最后都写成带‘/‘的形式

三:URL中的参数

对于上面的例子/task/<int:task_id>/edit/可以通过在url给函数传递参数,

flask提供了一个参数装换器<converter:argument> 只有当传递的参数通过convert转换后合法才行。

flask提供了三个converters有三个:

int:参数值必须是整型

float:参数值必须是浮点型

path:参数值必须是string,并且string也是默认的,还可以接受"/"线

我们也可以自己定义自己的conventer,通过flask提供的url_map来自定义自己的conventer。

# encoding=utf-8
from flask import Flask
from flask import url_for,render_template
from werkzeug.routing import BaseConverter

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split(‘,‘)
    def to_url(self, values):
        return ‘,‘.join(BaseConverter.to_url(value)
                        for value in values)

app = Flask(__name__)
app.url_map.converters[‘list‘] = ListConverter

@app.route("/list/<list:data>/")
def test_list(data):
    return ‘‘.join(data)

默认就是调用converter的to_python方法,只有我们继承BaseConverter来写子类,并重写to_python和to_url方法就OK了。这里只是一个简单的示例。

更深入的学习的话需要看一些Werkzeug的document。

Flask实例教程三

时间: 2024-10-26 20:30:04

Flask实例教程三的相关文章

Flask实例教程六

Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行,提供能兼容众多数据库(如 SQLite.MySQL.Postgres.Oracle.MS-SQL.SQLServer 和 Firebird)的企业级持久性模型. 一.为你的Flask应用加载Flask-SqlAlchemy扩展 from flask import Flask from fl

Flask实例教程四

一:Flask处理请求和回复 Flask和Werkzeug提供了request和response对象去处理请求和回复的数据.Flask通过@app.route包裹的函数(后面我们称这个函数叫做视图函数),来响应请求. 视图函数返回的值可以分为三类: string:返回的就是普通的字符串. 一个response的实例:具备HTTP属性的一个响应的对象的实例.通过make_respone来构建 一个元组:(string,status)或者(string,status,http_headers)这样的

Flask实例教程五

一:Flask中的g对象 Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0~9的整数,并使用g.x保存并记录debug日志: # encoding=utf-8 from flask import Flask from flask import g import random app = Flask(__name__) @app.before_re

开发一个新的android界面、界面跳转 看图学Android---Android 开发实例教程三、四

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 一.课程功能 本课程讲述建立一个新界面和界面切换(从界面一切换到界面二). 二.课程界面 界面一(启动界面) 界面二(主界面) 三.工作流程 完成页面切换需要2个过程: 1.建立一个工程,见第二节. http://blog.csdn.net/wyx100/article/details/45248209 可以在该项目基础继续开发. 2.建立开机界面 先引入资源

开机动画 看图学Android---Android 开发实例教程五

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 在<开发一个新的android界面.界面跳转 看图学Android---Android 开发实例教程三.四>基础完成开机动画,开机界面的图片,在5.5秒内逐渐消失,显示主界面. 只修改StartActivity.java中代码以下部分 StartActivity.java源代码 package com.example.helloword; import an

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

Omnet++ 4.0 入门实例教程

http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用.照着做就能完成,有些小地方不同而已 Omnet++ 4.0 入门实例教程根据http://omnest.com/webdemo/ide 上的实例,自己动手做了做.新版本的4.0 跟它视频上的版本有些差别,配图说明一下我的操作过程,供大家一起学习.现在开始.首先,开发环境选择simulation 的视

flask 大型教程项目优化版(1):Hello World

Hello World 作者背景 作者是一个使用多种语言开发复杂程序并且拥有十多年经验的软件工程师.作者第一次学习 Python 是在为一个 C++ 库创建绑定的时候. 除了 Python,作者曾经用 PHP, Ruby, Smalltalk 甚至 C++ 写过 web 应用.在所有这些中,Python/Flask 组合是作者认为最为自由的一种. 应用程序简介 作为本教程的一部分–我要开发的应用程序是一个极具特色的微博服务器,我称之为 microblog . 我会随着应用程序的不断地进展将涉及到

BPEL 实例教程

http://www.oracle.com/technetwork/cn/articles/matjaz-bpel1-090722-zhs.html BPEL 实例教程 作者:Matjaz Juric 了解如何创建一个将一系列虚拟的.与旅行相关的 web 服务结合起来的示例业务流程,然后将其部署到 Oracle BPEL Process Manager 运行时环境. 本文相关下载  示例代码 Oracle BPEL Process Manager 和 Designer 面向 Web 服务的业务流