zoukankan      html  css  js  c++  java
  • Flask入门

    什么是Flask?

    用于搭建Web应用的微框架。说其“微”,是指其核心足够简单,可扩展,与Django的理念相反。

    (web development, one drop at a time  vs  the web framwork for perfectionists with deadlines)

    只要创建好app,做好路由映射(基于装饰器),马上就可以让Flask运转起来

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return "Hello World!"
    
    if __name__ == "__main__":
        app.run()

    访问本机的5000端口,就能看到结果。

    功能初探

    可定义多映射

    @app.route('/index')
    @app.route('/')
    def index():
        return “home page“

    可定义访问方法,参数和参数类型,

    @app.route('/profile/<int:uid>', methods=['GET', 'POST'])
    def profile(uid):
        return "profile", str(uid)

    获得请求信息,定义响应信息

    from flask import make_response, request
    
    @app.route('/request')
    def request_demo():
        res = ''
        key = request.args.get('demo_key', 'default_value')
        res = res + request.url + '++' + request.path + '<br>'
        for property in dir(request):
            res = res + str(property) + '|==|<br>' + str(eval('request.' + property)) + '<br>'
        response = make_response(res)
        response.set_cookie('cookie_key', key)
        response.status = '404'
        response.headers['header_key'] = 'header_value'
        return response

    重定向和处理错误

    from flask import redirect
    
    @app.route('/redirect_target')
    def redirected():
        return 'target'
    
    
    @app.route('/from_here')
    def redirect_demo(code):
        return redirect('/redirect-target')
    
    
    @app.errorhandler(404)
    def page_not_found(error):
        return render_template('not_found.html')

    在前后请求之前传递信息,有消息闪现(Message Flashing)机制

    from flask import flash, get_flashed_messages
    
    @app.route('/login')
    def login():
        # 每登录一次都为把消息压入消息队列中,首页的提示信息会一直增加
        flash('登录成功')
        return 'ok'
    
    
    @app.route('/')
    def index():
        res = ''
        for msg in get_flashed_messages():
            res = res + msg + '<br>'
        return res

    Jinja2模板

    {% extends "base.html" %}
    
    <title>{% block title %}{% endblock %}</title>
    <ul>
    {% for user in users %}
      <li><a href="{{ user.url }}">{{ user.username }}</a></li>
    {% endfor %}
    </ul>

    可安装flask_script模块为Flask编写外部脚本,方便进行调试和管理

    from flask_script import Manager
    from demo import app
    
    manager = Manager(app)
    
    
    @manager.command
    def hello(name):
        print('hello', name)
    
    
    @manager.command
    def initialize_database():
        """initialize database"""
        print('database started.')
    
    
    if __name__ == '__main__':
      # 默认有runserver命令,启动server manager.run()
    python manage.py hello demo
    python manage.py initialize_database
    python manage.py runserver

    ORM

    from flask_ins import db
    
    
    class User(db.Model):
        __tablename__ = 'user'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        username = db.Column(db.String(80), unique=True)
        password = db.Column(db.String(32))
        # 头像
        head_url = db.Column(db.String(236))
        # 用户可以有多张图片,一对多
        images = db.relationship('Image', backref='user', lazy='dynamic')
    
        def __init__(self, username, password):
            self.username = username
            self.password = password
            # 调用unsplash的接口,生成随即图片
            self.head_url = get_image_url(icon_url)
    
        def __repr__(self):
            return '<User %d %s>' % (self.id, self.username)
    
    
    class Image(db.Model):
        __tablename__ = 'image'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        # 外键,与relationship搭配使用
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
        url = db.Column(db.String(512))
        created_date = db.Column(db.DateTime)
    
        def __init__(self, url, user_id):
            self.url = url
            self.user_id = user_id
            self.created_date = datetime.now()
    
        def __repr__(self):
            return'<Image %d %s>' % (self.id, self.url)

    参考资料:

    http://flask.pocoo.org/docs/1.0/

    http://jinja.pocoo.org/docs/2.10/

    https://flask-script.readthedocs.io/en/latest/

  • 相关阅读:
    vue-cli常用配置
    浏览器进程线程时间循环、与vue netTick的实现原理
    WebSocket的兼容性
    hiper、sitespeed性能工具
    excel操作
    performance面板使用,以及解决动画卡顿
    axios设置了responseType: 'json‘’,ie问题
    docker服务重启
    Spring Boot AOP之对请求的参数入参与返回结果进行拦截处理
    python中几种单例模式的实现
  • 原文地址:https://www.cnblogs.com/yifeixu/p/10810242.html
Copyright © 2011-2022 走看看