美文网首页
day56-flask框架基础

day56-flask框架基础

作者: barriers | 来源:发表于2019-01-21 19:53 被阅读0次

    1最小flask应用

    1.1安装flask

    virtualenv --no-site-packages flaskenv8
    pip install flask
    

    然后新建一个空文件夹,用pycharm打开,然后在空文件夹中创建一个py文件

    1.2最小应用

    from flask import Flask
    app = Flask(__name__)
    @app.route('/hel/')
    def hello():
        return 'hello wrold'
    if __name__ == '__main__':
        app.run()
    

    最小应用代码注释
    1.导入Flask类
    2.生成一个flask的对象,传入name参数,表示模块名或包名
    3.告诉服务器,访问127.0.0.1:5000/hel/地址可触发hello方法;类似django中的urls.py文件的功能
    6.直接启动本文件,才执行app.run()

    1.3启动最小应用

    if __name__ == '__main__':
        ip = sys.argv[1]
        port = sys.argv[2]
        app.run(host=ip, port=port, debug=True)
    

    host代表启动时的ip地址;port代表启动的端口;debug代表启动的模式,debug=True为调试模式; ctrl+s后会自己启动项目。
    可以直接用1.2节中的app.run()直接启动应用,但是,这样就不能修改ip和端口,而用本方法能够修改ip和端口。启动指令为python hello.py 0.0.0.0 82(文件名+ip+端口)

    1.4使用manage启动文件

    先安装flask_script库

    pip install flask-script
    

    设置manage

    from flask import Flask
    from flask_script import Manger
    manage=Manage(app)
    @blue.route('/hello/')
    def hello():
        return '还有几天放假
    if __name__ == '__main__':
        manage.run()
    

    manage = Manager(app):管理flask应用对象app
    启动命令

    python manage.py runserver -h 0.0.0.0 -p 80 -d
    

    -h 表示ip地址 ;-p表示端口 -d表示debug模式
    flask-script - 管理启动命令
    flask-blueprint - 管理路由地址

    2拆分视图函数

    背景:模块化管理路由地址
    安装蓝图库

    pip install flask-blueprint
    

    初始化蓝图对象,并使用对象管理路由

    blue = Blueprint('first', __name__)
    

    管理路由:@blue.route('/hello/')

    @blue.route('/hello/')
    def hello():
        return '还有几天放假'
    

    在manage页面注册蓝图

    app.register_blueprint(blueprint=blue, url_prefix='/app')
    

    第一个参数为引入的blue对象,第二个参数为路由的前缀;
    当页面出现cannot import 。。(不能导入某数据时)原因为两个页面出现互相引用

    3路由规则

    在flask中也可以在路由后面接参数;格式为<转换器:参数>
    <int:id> 表示接受的id值为int类型
    <string:name> 表示接收的name参数为string类型,可简写为<name>类型
    <float:num> 表示接收的num参数为浮点类型
    <uuid:uid> 表示接收的uid参数为uuid类型值
    <path:path> 表示接收的p变量为路径

    @blue.route('/stu/<int:id>/')
    def stu(id):
        print(type(id))
        return 'hello stu id:%d' % id
    
    @blue.route('/name/<string:name>/')
    def stu_name(name):
        print(type(name))
        return 'welcome stu:%s' % name
    
    @blue.route('/float/<float:num>/')
    def float_num(num):
        print(type(num))
        # return 'float num:%s' % num #将小数当成字符串输出
        return 'float num:%.2f' % num   将小数保留两位小数输出
    
    @blue.route('/get_uuid/')
    def get_uuid():
        import uuid
        return 'uuid:%s' % str(uuid.uuid4())
    
    @blue.route('/uuid/<uuid:uid>/')
    def uid(uid):
        return 'uid:%s' % uid
    
    @blue.route('/path/<path:p>/')
    def get_path(p):
        return 'path:%s' % p
    

    4重定向

    重定向分为直接重定向和反向解析重定向两种

    4.1直接重定向

    @blue.route('/redirect_hello/')
    def redirect_hello():
        return redirect('/app/hello/')
    

    直接重定向由路由的绝对路径构成

    4.2反向解析重定向

    反向解析重定向由url_for来完成,其形式为url_for('生成蓝图的第一个参数.重定向的函数名'),又可分为无参跳转和有参跳转两种

    @blue.route('/redirect_hello/')
    def redirect_hello():
        return redirect(url_for('first.hello'))
    
    @blue.route('/redirect_hello/')
    def redirect_hello():
        return redirect(url_for('first.float_num', num=10.1))
    

    5错误抛出与捕获

    1导包:from flask import abort
    2使用:abort(500)
    捕获:@blue.errorhandler(500)
    抛出错误码时,错误码必须符合http定义的状态码,且抛出的错误码要符合运用场景

    @blue.route('/index/')
    def index():
        try:
            1/0
        except Exception as e:
            abort(500) # 抛出500错误
        return 'hello'
    
    抛出错误并捕获500错误
    @blue.errorhandler(500)
    def error_500(e):
        return 'exception :%s' % e
    

    6页面渲染

    html模板文件需存在于templates文件夹下,且templates和manage.py文件同级

    @blue.route('/my_index/', methods=['GET', 'POST', 'PATCH'])
    def my_index():
        if request.method == 'GET':
            return render_template('index.html')
        if request.method == 'POST':
            pass
    

    页面渲染:render_template('index.html')
    请求方式:@blue.route('/my_index/', methods=['GET', 'POST', 'PATCH']),不写methods时默认为get

    7请求与响应

    7.1获取前端传回的数据

    当为get请求方式时,获取从前端传回的参数使用args获取
    request.args.get(key)
    request.args.getlist(key)
    前者只获取一个值,后者会将所有传递过来参数名为key的组成一个列表返回
    当请求方式为post/put/patch/delecte时,获取数据用form获取
    request.form.get(key)
    request.form.getlist(key)
    同args一样,前者也只取一个值,后者取key对应的所有值并组成一个列表

    7.2获取请求方式

    request.method

    7.3获取路由

    request.path

    7.4获取cookie

    request.cookies

    7.5获取文件

    request.files

    7.6响应

    创建响应:make_response(响应内容,响应状态码),状态码默认200,可不写
    设置cookie: 响应对象.set_cookie(key, value, max_age)
    删除cookie:响应对象.delete_cookie(key)
    响应字符串

    @blue.route('/response/', methods=['GET'])
    def get_response():
        res = make_response('<h3>2019</h3>', 200)
        return res
    

    响应模板文件

    @blue.route('/response/', methods=['GET'])
    def get_response():
        html = render_template('index.html')
        res = make_response(html, 200)
        res.set_cookie('token', '09876543210', max_age=100)
        res.delete_cookie('token')
        return res
    

    相关文章

      网友评论

          本文标题:day56-flask框架基础

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