美文网首页
2020-05-29--flask02--flask基础02

2020-05-29--flask02--flask基础02

作者: program_white | 来源:发表于2020-05-30 14:43 被阅读0次

本节内容

  • 路由参数限定
  • 指定请求方式
  • 返回Json数据
  • 重定向
  • 自定义状态码
  • 自定义转换器
  • 异常捕获

路由的参数限定

flask路由传递参数默认为str类型,我们可以进行限定类型:
在参数的前边加上 ---- 类型名:

#指定参数类型为int类型,也可以指定为其他。
@app.route('/user/<int:user_id>')
def user_info2(user_id):
    return f'hello2{user_id}'

访问:

127.0.0.1:5001/user/123

使用的是:

from werkzeug.routing import IntegerConverter

IntegerConverter类进行处理

指定请求方式

from flask import request
#请求方式的限定,默认为GET,
@app.route('/demo1',methods=['GET','POST'])
def demo1():
    return request.method

使用postman进行测试:
使用get方式:



使用post方式:


返回JSON格式

一种通用数据格式

JSON与字典的互相转换

tvs = '''          #json字符串
{
"subjects": [
{
"rate": "7.5",
"cover_x": 4429,
"cover_x": "传闻中的陈芊芊",
"url": "https://movie.douban.com/subject/34463197/",
"playable": true,
"cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
},
  {
"rate": "7.5",
"cover_x": 4429,
"cover_x": "传闻中的陈芊芊",
"url": "https://movie.douban.com/subject/34463197/",
"playable": true,
"cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
},
  {
"rate": "7.5",
"cover_x": 4429,
"cover_x": "传闻中的陈芊芊",
"url": "https://movie.douban.com/subject/34463197/",
"playable": true,
"cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
}
]
}
'''
# tvs 是一个json字符串
import json
# json.loads()将json字符串转化为字典
print(type(tvs))      #str

test_dict = json.loads(tvs)
print(type(test_dict))          #dict
print(test_dict["subjects"])        #取出键位subjects的值
print([x for x in test_dict["subjects"][:2]])      # 遍历该值,取出前两个


#将字典转化为json
json_dict = {       #dict
    'name':"zhangsan",
    "age":"18"
}
# json.dumps() 是将字典转化为json字符串
res = json.dumps(json_dict)
print(type(res))      #str

返回json格式的数据

app.py:


from flask import jsonify
#返回json对象{},json数组[]
@app.route('/demo2',methods=['GET','POST'])
def demo2():
    json_dict = {  # dict
        'name': "zhangsan",
        "age": "18"
    }
    return jsonify(json_dict)

运行:

127.0.0.1:5001/demo2

返回json格式:



如果使用json.dumps()进行转换成json格式,那么不符合http协议的规范

import json
@app.route('/demo3',methods=['GET','POST'])
def demo3():
    json_dict = {  # dict
        'name': "zhangsan",
        "age": "18"
    }
    res = json.dumps(json_dict)
    return res

运行:


重定向

重定向的使用要用到两个flask下的方法

  • redirect()
  • url_for()

1.重定向到外部网址

#重定向到百度
from flask import redirect
@app.route('/demo4')
def demo4():
    return redirect('https://baidu.com')

2.重定向到自己编写的视图函数/路由
重定向到自己的视图函数

import json
@app.route('/demo3',methods=['GET','POST'])
def demo3():
    json_dict = {  # dict
        'name': "zhangsan",
        "age": "18"
    }
    res = json.dumps(json_dict)
    return res
1.根据路由地址进行匹配
@app.route('/demo6')
def demo6():
    return redirect('/demo3')

3.使用url_for(视图函数名)进行匹配
@app.route('/demo6')
def demo6():
    return redirect(url_for('demo3'))

3.携带参数的重定向

@app.route('/user/<user_id>')
def user_info1(user_id):
    return f'hello1{user_id}'
#重定向到自己的视图函数,并添加参数

from flask import url_for
@app.route('/demo5')
def demo5():
    #url_for --- 相当于django中{% url '' 参数 %}
    return redirect(url_for('user_info1',user_id=333))     #重定向到demo3视图函数

自定义状态码

#自定义状态码
@app.route('/demo7')
def demo7():
    #python中的return可以返回多个对象
    return '自定义状态码',666

运行:


自定义转换器

自定义转换器的步骤:

  1. 导入转换器基类,在flask中所有的路由匹配规则都是使用转换器对象进行记录的。
from werkzeug.routing import BaseConverter     #转换器基类

BaseConverter类:


  1. 自定义的转换器都要继承BaseConverter。
    RegexConverter类:
#自定义转换器
class RegexConverter(BaseConverter):
    def __init__(self,url_map,*args):
        super(RegexConverter, self).__init__(url_map)  #调用父类的构造器
        #将第一的参数当作匹配规则进行保存
        self.regex = args[0]      #自定义的正则匹配规则赋给父类的regex
  1. 添加转换器到默认的字典中。
app.url_map.converters['re'] = RegexConverter       #添加到默认字典中

已有的转换器:


4.使用自定义的转换器实现自定义规则匹配

@app.route('/user/<re("[0-9]{3}"):user_id>')
def index(user_id):
    return 'hello%{}'.format(user_id)

分析图解:


异常捕获

@app.route('/')
def index1():
    #主动抛出http异常状态码,只能抛出http协议错误的状态码404,500等
    abort(500)
    return 'hello'
#捕获错误
# errorhandler装饰器:
@app.errorhandler(500)        #捕获500错误,执行对应函数
def errorhandler_server(val):
    return '服务器坏了'

访问:127.0.0.1:5000:



除0错误:

@app.route('/index2')
def index2():
    #主动抛出http异常状态码,只能抛出http协议错误的状态码404,500等
    a = 0
    b=1/a
    return 'hello'
#捕获除0错误
@app.errorhandler(ZeroDivisionError)        #捕获500错误,执行对应函数
def zeroDivisionError(val):
    return f'除数不能为0:{val}'

访问:127.0.0.1:5000/index2:


相关文章

  • 2020-05-29--flask02--flask基础02

    本节内容 路由参数限定 指定请求方式 返回Json数据 重定向 自定义状态码 自定义转换器 异常捕获 路由的参数限...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 区块链币圈基础链板块解析

    2018-02-02 区块链币圈 基础链板块 板块定义: 基础链板块是具有不依赖第三方、通过...

  • Android 基础

    Android基础01控件和布局 Android基础02数据存储 Android基础03网络编程 Android基...

  • Go学习记录

    2020-02-241.Go语言基础 2020-02-26程序实体那些事1、2、3

  • 音频基础知识02

     音频基础知识 01  音频基础知识 02  音频基础知识 03  音频基础知识 04 人类收集声音的历史   为...

  • 《Pandas 1.x Cookbook · 第二版》第01章

    第01章 Pandas基础第02章 DataFrame基础运算[https://www.jianshu.com/p...

  • Webpack 4 学习04(配置webpack-dev-ser

    前提:- Webpack 4 学习01(基础配置)​ - Webpack 4 学习02(...

  • day02 Python基础

    目录 01 Python基础 02 Python基础语法 03 变量 04 运算符 05 进制转换 01-heol...

网友评论

      本文标题:2020-05-29--flask02--flask基础02

      本文链接:https://www.haomeiwen.com/subject/sbtfzhtx.html