flask学习

1.flask的第一个app

# 1 加载接口名
from flask import Flask

# 2 实例化
app = Flask(__name__)

# 3 定义视图函数
@app.route('/index')
def index():
    return 'hello world'
# 4 利用装饰器生产路由映射

# 5 开启服务器
if __name__ == '__main__':
    app.run(debug=True)

2.查看路由

在这里插入图片描述

3.创建app的参数

def __init__(self, import_name, static_path=None, static_url_path=None,
                 static_folder='static', template_folder='templates',
                 instance_path=None, instance_relative_config=False):
1 import_name flask程序所在的包(模块),传入的是__name__,决定的是flask在访问静态文件的时候查找包的路径
2 static_path 静态文件访问路径,一般不推荐使用,使用的是static_url_path
3 static_url_path 静态文件访问的路径,可以不传
4 static_folder 静态文件存储的文件夹,可以不填
5 template_folder 模板文件存储的文件夹,可以不填

4.配置参数

4.1 从对象中配置

4.1.1 先创建配置类

class Config(object):
    DEBUG = True

4.1.2在app.config中配置

app.config.from_object(Config)

4.2 从对象中配置

4.2.1 在文件中先定义相关的参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfXKxzdj-1603104370123)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20201019152343961.png)]

4.2.2 在app.config.from_pyfile中配置

app.config.from_pyfile('./config.ini')

4.3 在app.run中直接配置

if __name__ == '__main__':
    app.run(debug=True)

5.路由的基本定义

5.1 需要自定义路由转换器

class RegexConverter(BaseConverter):
    def __init__(self,*args):
        print('------->',args)
        BaseConverter.__init__(self.args[0])
        self.regex=args[1]
注意点:
1自定义转换器需要继承于BaseConverter
2.需要在父类的init基础上进行下一步操作
3.外键传参的第一个参数是url_map实例,第二个参数是自定义的正则表达式

5.2 将自定义路由转换器注册到默认转换器中

#注册
app.url_map.converters['re']=RegexConverter

5.3 使用

#@app.route('/showinfo/<转换器:参数名>')
@app.route('/showinfo/<re("userid_\d{3:8"}):user_id>')
def showinfo(user_id):
    return 'hello world %s'%user_id
    
注意点:
1.<自定义转换器名字('正则表达式'):参数名字>

5.4 请求方式的定义

@app.route('/showinfo/<re("userid_\d{3:8}“):user_id>',methods=['POST'])

1.OPTIONS和HEAD是自带的
2.使用methods=[允许的请求方式]

6.响应

6.1 利用字符串直接进行响应

@app.route('/index/<int:user_id>')
def index(user_id):
    return 'hello world %s'%user_id

6.2 将json数据返回

6.2.1 json

@app.route('/index123')
def index123():
    new_dict={"boy":"jim","age":18}
    str_json = json.dumps(new_dict)

    return str_json,200,{'Content-Type':'application/json'}@app.route('/index123')

6.2.2 jsonify

@app.route('/index123')
def index123():
    new_dict={"boy":"jim","age":18}
return jsonify(new_dict)

6.3 重定向

@app.route('/showbaidu')
def showbaidu():
    return redirect('https://www.baidu.com/')

6.4 模板携带数据返回

@app.route('/showinfo/<int:user_id>')
def userinfo(user_id):
    return str(user_id)

@app.route('/newindex')
def newindex():
    return redirect(url_for('userinfo',user_id=123))

注意:
1.需要返回字符串形式
2.参数以等于的形式直接写在url_for中

7.错误

@app.route('/showinfo')
def showinfo():
    abort(404)
    return 'ok'

@app.errorhandler(404)
def handler_err(err):
    print(err)
    return '这是自定义的错误页面',404
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页