Flask基本概念

Flask入门

WEB工作原理

  • C/S与B/S架构

  • B/S架构工作原理

    • 客户端(浏览器) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=> 数据库(MySQL)

    • 说明:flask自带一个测试的WEB服务器,但是它仅仅适合于测试环境,不能用于生产环境。

MVC与MTV框架

  • MVC框架

    • M:Model,模型,即数据模型,负责数据的存取。

    • V:View,视图,负责数据的展示效果。

    • C:Controller,控制器,负责业务逻辑的处理。

  • MTV框架

    • M:Model,模型,即数据模型,负责数据的存取。

    • T:Templates,模板,负责数据的展示效果。

    • V:View,视图函数,负责业务逻辑的处理。

  • 总结:使用MVC或MTV就是为了解耦,可以提高开发维护的效率。

Flask框架简介

  • 说明:

    flask是一个轻量级的web框架,被称为微型框架。只提供了一个高效稳定的核心,其它全部通过扩展来实现。意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩展库。

  • 核心:

    • WSGI系统、调试、路由

    • 模板引擎(Jinja2,是flask核心开发者人员发开的)

  • 安装:pip install flask

启动完整代码

  • 完整代码

    # 导入类库
    from flask import Flask
    ​
    # 创建应用实例
    app = Flask(__name__)
    ​
    # 添加视图函数
    @app.route('/')
    def index():
        return 'Hello Flask!'   
    ​
    # 启动应用
    if __name__ == '__main__':
        app.run()    
  • 启动参数

    参数说明
    debug是否开启调试模式,默认为False;开启后会有出错调试信息,文件会自动加载。
    threaded是否开启多线程,默认为Flase。
    host指定主机,默认为'127.0.0.1',设置为'0.0.0.0'后可以通过IP进制访问
    port指定端口,默认为5000。

    启动示例:app.run(debug=True, threaded=True, host='0.0.0.0', port=5555)

flask-script

  • 说明:

    简单来说,该库就是flask终端启动的参数解析器;这样就可以不更改代码就能完成不同方式的启动。

  • 安装:pip install flask-script

  • 使用:

      # 导入类库
      from flask_script import Manager
    ​
      # 创建对象
      manager = Manager(app)
    ​
      # 启动应用
      if __name__ == '__main__':
          manager.run()
  • 启动参数:

    参数说明
    -?,--help查看帮助
    -h,--host指定主机
    -p,--port主动端口
    -d,--debug开启调试模式
    -r,--reload自动加载
    --threaded开启多线程
    --processes指定多进程数量

    启动示例:python manage.py runserver -d -r -h 0.0.0.0 -p 5555

flask使用

  • 视图函数

    • 示例:

    # 无参路由
    @app.route('/')
    def index():
        return '<h1>Hello Flask!</h1>'
    ​
    # 带参路由,可以传递多个参数
    @app.route('/welcome/<name>/<uid>/')
    def welcome(name, uid):
        return 'Hello {} {}'.format(name, uid)
    ​
    # 指定参数类型,如:str(默认)、int、float、path
    @app.route('/user/<int:uid>/')
    def user(uid):
        return 'Hello {}号'.format(uid)
    ​
    # path类型:类型仍然是str,只是将'/'当做普通字符处理而已
    @app.route('/path/<path:p>/')
    def path(p):
        return p
    • 说明:

    1.路由末尾的'/'建议都加上,防止出现路由多敲'/'出现的问题
    2.若需要路由参数,参数需要放在<>中,对应的视图函数需要同名的参数
    3.路由参数可以指定多个,也可以指定类型
    4.常用参数类型:str(默认)、int、float、path,使用时放在参数前面,使用':'与参数连接
    5.path类型其实是str类型,只是将'/'作为普通字符处理罢了。
  • 请求(request)

    from flask import request
    ​
    # 请求,request中存放了所有的HTTP请求信息
    @app.route('/request/')
    def req():
        # 完整的路由地址
        # return request.url
        # 不包含GET参数的路由地址
        # return request.base_url
        # 只有协议主机和端口
        # return request.host_url
        # 只包含装饰器中的路由地址
        # return request.path
        # 请求方法的类型:GET、POST
        # return request.method
        # 客户端的IP
        # return request.remote_addr
        # args:GET参数;form:POST参数;values:GET和POST
        # return request.args.get('uid', '默认值')
        # headers:所有的请求头信息
        return request.headers.get('User-Agent')
  • 响应(response)

    from flask import make_response
    ​
    # 响应response
    @app.route('/response/')
    def response():
        # 直接返回字符串
        # return 'OK'
        # 可以在返回时指定状态码,默认都是200
        # return 'page not found', 404
        # 先用专门的函数构造一个响应对象,可以指定内容及状态码等
        resp = make_response('我是通过函数构造的响应', 404)
        # 设置响应头信息
        resp.headers['uid'] = 250
        return resp
  • 重定向(redirect)

    from flask import redirect, url_for
    ​
    # 重定向
    @app.route('/old/')
    def old():
        # return '原来的数据'
        # return redirect('/new/')
        # 根据视图函数名反向构造路由地址,参数是视图函数名
        # return url_for('new')
        return redirect(url_for('new'))
    ​
    @app.route('/new/')
    def new():
        return '新的数据'
  • 反向构造路由(url_for)

    # 反向构造路由
    @app.route('/urlfor/')
    def urlfor():
        # 不带参数的路由
        # return url_for('new')
        # 可以构造带参的路由,多出来的参数以GET形式传递
        # return url_for('user', uid=250, name='cuihua')
        # 构造完整(带协议主机和端口)路由,可以进行外部跳转
        return url_for('user', uid=250, name='cuihua', _external=True)
  • 终止及错误定制

    # 终止abort
    @app.route('/abort/')
    def err():
        # 终止代码执行,其实是向系统抛出指定异常
        # 系统捕获异常,按照统一的方案进行处理
        abort(404)
        return '正常'
    ​
    # 定制错误显示
    @app.errorhandler(404)
    def page_not_found(e):
        return '是不是搞错了大哥?'

蓝本使用

  • 说明:

    当大量的视图函数存放在一个文件中,很明显是不合适的。最好是根据功能模块进行划分,将相关的功能模块放在同一文件,蓝本就是用来解决这个问题的。

  • 使用:

    • user.py

    # 导入类库
    from flask import Blueprint, url_for
    ​
    # 创建对象,可以指定统一的前缀
    user = Blueprint('user', __name__, url_prefix='/user')
    ​
    # 添加视图函数
    @user.route('/login/')
    def login():
        # 当反向构造同一蓝本中的路由时,蓝本名可以省略,但是不能省略'.'
        return url_for('.register')
        return '欢迎登录'
    ​
    @user.route('/register/')
    def register():
        return '欢迎注册'
  • manage.py

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值