前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask框架教程汇总(1)---视图/重定向/传参

Flask框架教程汇总(1)---视图/重定向/传参

原创
作者头像
半岛铁盒子
修改2020-09-24 10:09:59
1.1K0
修改2020-09-24 10:09:59
举报
文章被收录于专栏:Python 专题Python 专题

本节目录:

1 完整的flask启动

2 视图函数传单个参数

3 参数类型

4 视图的响应

5 重定向—>redirect和url_for的结合

6 请求与响应

本教程的flask环境都是在ubuntu 16.04下 —python3.5—IDE为pycharm 如果有任何问题可以留言哦 !


使用 Flask, 需要先安装—->pip3 install flask

简介:flask是一个小的python web框架 只提供了一个强健的核心 其它功能都是提供扩展库来去实现的

一、完整的flask启动

创建一个名为manage.py的python文件, 并导入flask

代码语言:python
复制
from flask import Flask
app = Flask(__name__) #__main__     manage
@app.route('/') #路由
def index(): #视图函数
    return 'Hello Flask'
if __name__ == '__main__:

    app.run()

此时直接运行run这个名为manage.py的文件,会看到控制台显示以下示例, 说明服务器启动成功, 然后打开本机浏览器输入

代码语言:javascript
复制
http://127.0.0.1:5000/

即可看到 ‘Hello Flask’ 表示一个简单的flask项目运行了起来. (随后我们将不会再使用本方法启动服务器, 会换成manage方法启动,后面会有讲到)

代码语言:javascript
复制
 * Serving Flask app "manage" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

路由

代码语言:javascript
复制
@app.route('/')
def index(): #视图函数
    return 'Hello Flask'

启动参数

app.run()

(1) debug 默认为Flase True 调试模式 自动加载代码

(2) port 指定端口号

(3) host 指定主机名 host=’0.0.0.0’

(4) threaded 线程 True

二、视图函数传单个参数

(1) 使用无参路由

代码语言:javascript
复制
@app.route('/') #路由
def index(): #视图函数
    return 'Hello Flask'

(2) 有参路由

带参路由

代码语言:javascript
复制
@app.route('/find_girl/<name>')
def findGirl(name):
    return '找到了,名字是{}'.format(name)

三、参数类型

(1) string 默认就为字符串

(2) int 限制传递进来的参数为 int类型 不做类型的转换

(3) float 限制传递进来的参数为 float类型 不做类型的转换

(4) path 将请求的路由地址后面的所有参数 都认为是一个参数的值 不再做路由的查找

路由地址传递多

代码语言:javascript
复制
@app.route('/many_arg/<a>/<b>')
def many_arg(a,b):
    print(a,b)
    return '传递多个参数'

注意事项

  1. 路由末尾的/建议都加上 因为在需要的时候 浏览器会自动帮你添加上
  2. 路由参数的限制 前面int/float/path/string 使用:和参数名称隔开
  3. path其实也是字符串类型 只是参数的/不再认为是路由的分隔符 而是认为是参数

四、视图的响应

(1) 手动构造响应

return ‘响应的内容’,code 状态码

(2) make_response 来构造响应

from flask import make_response

五、重定向

from flask import redirect,url_for

redirect 不传参数重定向

代码语言:javascript
复制
@app.route('/redirect/')
def myRedirect():
    # return '正常请求'
    return redirect('/')#导入redirect  参数为路由地址

传参重定向

代码语言:javascript
复制
return redirect('/')#导入redirect  参数为路由地址
带参数
return redirect('/many_arg/1/2')#导入redirect  

url_for

无参 参数为路由地址

代码语言:javascript
复制
print(url_for('index')) #index是视图函数的名
print(url_for('indexxx')) #如果视图函数不存在 则抛出构造路由失败的异常

使用url__for构造带参路由
print(url_for('many_arg',a=1,b=2)) #index是视图函数的名

redirect和url_for的结合使用

代码语言:javascript
复制
return redirect(url_for('many_arg',a=1,b=2)) #index是视图函数的名

abort 终止 抛出指定的状态码

必须是标准的http状态码

代码语言:javascript
复制
    @app.route('/look_meizi/')
    def look_meizi():
        abort(500)
        # abort(404)

    #捕获指定的状态码  错误页面的定制
    @app.errorhandler(404)
    def page_not_found(e):
        return '你请求的地址被外星人挟持走了!!!'
        # return e

    @app.errorhandler(500)
    def server_error(e):
        return e

六、请求与响应

(1)current_app 当前app实例化的代理对象 获取当前实例化app的所有公共配置和实例化的app

实例

代码语言:javascript
复制
    @app.route('/current_app/')
    def myGetConfig():
        # return app.config['secret_key']
        return current_app.config['secret_key'] #拿到app的所有的配置

(2) 全局变量g

在一次请求中 可以全局获取

例子和使用详见钩子函数或者模板

(3) request

请求对象 包含了所有的http的请求信息

代码语言:javascript
复制
    @app.route('/request/')
    def get_http_message():
        print('获取完整的请求url',request.url) #获取完整的请求url
        print('获取去掉get传参的url',request.base_url)#获取去掉get传参的url
        print('获取主机名部分的url',request.host_url) #获取主机名部分的url
        print('获取路由地址',request.path) #获取路由地址
        print('获取请求的方法',request.method)
        print('获取get传参',request.args)
        获取指定key对应的值
        print('获取get传参',request.args['name'])
        print('获取get传参',request.args.get('name','该key不存在'))
        print('获取form表单传递过来的数据',request.form)
        print('获取form表单文件上传的数据',request.files)
        print('获取请求头信息',request.headers)
        print('获取cookie信息',request.cookies)
        print('获取传递过来的json',request.json)
        return  'request对象'

当get传参的key为相同时 的取值方式

request.args.getlist(key)

实例

代码语言:javascript
复制
    请求的url http://127.0.0.1:5001/get_arg/?a=1&a=2&c=3
    @app.route('/get_arg/')
    def get_arg():
        # print(request.args)
        # print(request.args.get('a'))
        # print(request.args.get('a'))
        print(request.args.getlist('a')) #['a','b']
        return '获取多个get传参'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档