1 路由和视图:

简介:

Flask框架包含两个核心:Werkzeug工具箱,Jinja2模板引擎

flask: 提供基本功能,属于轻量级

django: 提供相对完整功能,重量级

搭建虚拟环境

Helloworld :

#1.导入Flask类

from flask import Flask

#2.创建Flask对象接收一个参数__name__,它会指向程序所在的包

app = Flask(__name__)

#3.装饰器的作用是将路由映射到视图函数index

@app.route('/')

def index():

    return 'Hello World'

#4.Flask应用程序实例的run方法,启动WEB服务器

if __name__ == '__main__':

    app.run()

相关配置参数:

初始化参数:

app = Flask(__name__)

static_url_path静态文件访问路径,默认为:/ + static

static_folder静态文件存储的文件夹,默认为 static

template_folder模板文件存储的文件夹,默认为 templates

加载参数:

from flask import Flask

app = Flask(__name__)

# 配置对象,里面定义需要给 APP 添加的一系列配置

class Config(object):

    DEBUG = True

app.config.from_object(Config)# 从配置对象中加载配置

#app.config.from_pyfile('config.ini')# 从配置文件中加载配置

#app.config.from_envvar('FLASKCONFIG')# 加载指定环境变量名称所对应的相关配置

@app.route('/')

def index():

    return 'Hello World'

if __name__ == '__main__':

    app.run(host="0.0.0.0", port=5000, debug = True)

路由:

设置路由,路径,参数,请求方式

# 路由传递参数,整数,get或post方式

@app.route('/user/<int:user_id>',methods=['GET', 'POST'])

def user_info(user_id):

    return 'the num is %d' % user_id

响应:

# 生成json数据响应体

@app.route('/demo4')

def demo4():

    json_dict = {

        "user_id": 10,

        "user_name": "laowang"

    }

return jsonify(json_dict)

# 路由传递参数string

@app.route('/user/<int:user_id>')

def user_info(user_id):

    return 'hello %d' % user_id

# 重定向redirect(url_for(‘’,参))

@app.route('/demo5')

def demo5():

    # 使用 url_for 生成指定视图函数所对应的 url

return redirect(url_for('user_info', user_id=100))

# 渲染响应render_response(‘’,name=name)

转换器:

一.系统自带转换器

DEFAULT_CONVERTERS = {

'default':          UnicodeConverter,

'string':           UnicodeConverter,

'any':              AnyConverter,

'path':             PathConverter,

'int':              IntegerConverter,

'float':            FloatConverter,

'uuid':             UUIDConverter,

}

二.自定义转换器

from flask import Flas

k#导入基类转换器

from werkzeug.routing import BaseConverter

app = Flask(__name__)

# 1.自定义类,继承自BaseConverter

class MyRegexConverter(BaseConverter):

    # 2.编写初始化方法, init方法, 接收两个参数, url_map, regex, 并初始化父类空间和子类空间

    def __init__(self,url_map,regex):

        super(MyRegexConverter, self).__init__(url_map)

        self.regex = regex

# 3.将自定义转换器类,添加到默认的转换列表中

app.url_map.converters['re'] = MyRegexConverter

#使用自定义转换器#接收3位整数

@app.route('/<re("\d{3}"):num>')

def hello_world(num):

    print("num = %s"%num)

    return "the num is %s"%num

#接收一个手机号

@app.route('/<re("1[345678]\d{9}"):mobile>')

def get_phone_number(mobile):

    return "the mobile is %s"%mobile

if __name__ == '__main__':

    app.run()

异常捕获:

from flask import Flask,abort

app = Flask(__name__)

@app.route('/game/<int:age>')

def play_game(age):

    #异常抛出

    abort(404)

    return "helloworld"

#异常捕获

@app.errorhandler(404)

def page_not_found(e):

    print(e)

    return "找不到服务器资源,服务器搬家了"

if __name__ == '__main__':

    app.run()

钩子:

请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子:

# 在第一次请求之前调用,可以在此方法内部做一些初始化操作

@app.before_first_request

def before_first_request():

    print("before_first_request")

# 在每次请求之前调用,直接return之后那么就不会执行视图函数

@app.before_request

def before_request():

    print("before_request")

# 在执行完视图函数之后会调用,并且会把视图函数所生成的响应传入,可以在此方法中对响应做最后一步统一的处理

@app.after_request

def after_request(response):

    print("after_request")

    response.headers["Content-Type"] = "application/json"

    return response

# 请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息

@app.teardown_request

def teardown_request(e):

    print("teardown_request")

Request:

属性

说明

类型

data

记录请求的数据,并转换为字符串

*

form

记录请求中的表单数据

MultiDict

args

记录请求中的查询参数

MultiDict

cookies

记录请求中的cookie信息

Dict

headers

记录请求中的报文头

EnvironHeaders

method

记录请求使用的HTTP方法

GET/POST

url

记录请求的URL地址

string

files

记录请求上传的文件

*

python-Web-flask-路由和视图的更多相关文章

  1. Python Web Flask源码解读(二)——路由原理

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  2. flask路由和视图和cookie

    什么是路由 """ 客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行那些代码,所以 ...

  3. python web -- flask

    Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...

  4. Python Web Flask源码解读(一)——启动流程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  5. flask 路由和视图

    路由设置的俩种方式 @app.route('/xxx') def index(): return 'index' ------------------------------------------ ...

  6. Python Web Flask源码解读(三)——模板渲染过程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  7. Python Web Flask源码解读(四)——全局变量

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  8. web应用/路由控制/视图函数/单表多表操作

    一. 1.wen应用:BS架构的应用程序,B是浏览器,S:server(实现了wsgi协议)+ application https://www.cnblogs.com/liuqingzheng/art ...

  9. [Python web开发] 路由实现 (三)

    一.路由 1.1 什么是路由 简单说,就是路怎么走.就是按照不同的路径分发数据. URL就是不同资源的路径,不同路径应该对应不同的应用程序来处理. 所以,代码中要增加对路径的分支处理. 一个简单的路由 ...

  10. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

随机推荐

  1. 0001SpringBoot整合Mybatis

    SpringBoot整合Mybatis主要分为以下几个步骤: 1.添加Mybatis的起步依赖(pom.xml) 2.添加数据库驱动坐标(pom.xml) 3.添加数据库连接信息(applicatio ...

  2. 在vue项目中的main.js中直接使用element-ui中的Message 消息提示、MessageBox 弹框、Notification 通知

    需求来源:向后台请求数据时后台挂掉了,后台响应就出现错误,不做处理界面就卡住了,这时需要在main.js中使用axios的响应拦截器在出现相应错误是给出提示.项目使用element-ui,就调用里面的 ...

  3. Nginx中ngx_http_fastcgi_module

    转发请求到 FastCGI 服务器器,不不⽀支持 php 模块⽅方式指令:15.1 fastcgi_pass设置 fastcgi 服务器器的地址.地址可以指定为域名或 IP 地址,以及端⼝口Synta ...

  4. 纯css实现树形结构

    纯css实现属性结构 **css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收 缩以及复选框效果还得配合js来实现.其实展开和收缩就是一个点击元素其子元素隐藏 和显示的切换.* ...

  5. openstack 无法创建新虚拟机报错 openstack报错:Host is not mapped to any cell

    关联错误提示:Host is not mapped to any cell 控制节点上执行: root@ubsv:/home/makeit# nova-manage cell_v2 discover_ ...

  6. 八、linux文件系统上的特殊权限 SUID 、GUID、Sticky

    安全上下文 前提:进程有属主和属组,文件有属主和属组 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限 启动为进程之后,其进程的属主为发起者:进程的属组为发起者所属的组 进 ...

  7. BZOJ 4734 UOJ #269 如何优雅地求和 (多项式)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4734 (UOJ) http://uoj.ac/problem/269 题解 ...

  8. mysql 运行中 偶尔 报错 2002 也许是这个问题,内存不足导致的

    配置都是正常,最终发现内存使用率高达90%多,加配置后解决问题(升级服务器配置) 加之前是2核4g ,升级配置后 4核8g

  9. HTTP header 介绍 转载

    这篇文章为大家介绍了HTTP头部信息,中英文对比分析,还是比较全面的,若大家在使用过程中遇到不了解的,可以适当参考下 HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/ ...

  10. vue后台_实战篇

    一.一些常用组件效果的实现 1)面包屑导航 主要是使用$route.mathed:一个数组,包含当前路由的所有嵌套路径片段的路由记录 .路由记录就是 routes 配置数组中的对象副本 (还有在 ch ...