• Flask的简单认识


    Flask的简单认识

    Flask是轻量级的框架,适用于简单的程序


    与Django的比较:

    Django: 无socket,中间件,路由,视图(CBV,FBV),模板,ORM, cookie,session,缓存,序列化,Form,信号.....
    
    flask:  无socket,中间件(需要扩展),路由,视图(CBV,FBV),第三方模板(jinja2),cookie,session
    

    Flask 的网络通信, 依赖于 werkzeug模块(实现了wsgi协议的模块 )

    wsgi
    
        web 服务网关接口协议
    
    
    请求    -->>	   socket接听     -->>  web应用
    
                实现wsgi协议的模块
                本质:创建socket监听请求和转发请求
    

    Flask 的启动入口

    wsgi.py
    
        from werkzeug.wrappers import Request, Response
    
        @Request.application
        def hello(request):
            return Response('Hello World!')
    
        if __name__ == '__main__':
            from werkzeug.serving import run_simple
            run_simple('localhost', 4000, hello)
    
    flask
    
        from flask import Flask
    
        # 实例化Flask对象
        app = Flask(__name__)
    
        # 生成路由关系,并把关系保存到 app.url_map
        @app.route('/')
        def hello_world():
            return 'Hello World!'
    
        if __name__ == '__main__':
            app.run()
    
            # 启动程序,监听用户请求
            # 一旦请求到来,执行 app._ _call _ _方法
            # 封装用户请求
            # 进行路由匹配
    


    >**Flask 的路由系统**

    (1)装饰器与路由系统 捆绑到一起

    常用
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    

    (2) app.add_url_rule('/','hello_world',hello_world)

      def hello_world():
          return 'Hello World!'
    
      app.add_url_rule('/','hello_world',hello_world)
    

    ( 3 ) 带参数的装饰器 -- flask 的路由系统

    装饰器
    
        有参数的装饰器, 形成闭包 把参数传给inner使用
    
            @app.route('/')
            def hello_world():
                return 'Hello World!'
    
            def route(self, rule, **options):
                def decorator(f):
                    endpoint = options.pop('endpoint', None)
                    self.add_url_rule(rule, endpoint, f, **options)
                    return f
                return decorator
    
    
        无参数的装饰器
    
            def wrapper(func):
                def inner(*args,**kwargs):
                    print('hello')
                    return func(*args,**kwargs)
                return inner
    
            @wrapper
            def func(arg):
                print(arg)
    

    Flask 的 render_template

      导入
         from flask import render_template
    
      指定模板文件夹
         app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')
    
      返回数据给模板
         return render_template('login.html',msg=msg)
    

    Flask 的 request

    指定请求方式
        @app.route('/login',method=['GET','POST'])
        def login():
            return render_template('login.html')
    
    request的数据
        print(request) #<Request 'http://127.0.0.1:5000/login' [POST]>
        print(request.query_string)
        print(request.args)   # get 请求的参数  
        print(request.values) # 全部的请求参数  CombinedMultiDict([ImmutableMultiDict([('v', '123')]), ImmutableMultiDict([])])
        print(request.form)   # post 请求的参数
    

    Flask 的 静态文件

    配置 static文件目录,和 path
    
       app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')
    
    src
        "{{ url_for('static',filename='1.png') }}"
        "/static/1.png"
    

    Flask 的 session -- secret key配置

    session (所有的都放到浏览器) | django的session 是放在服务端
    session_id -- cookie
            放在浏览器,减轻服务端压力
    
    
    app.config['SECRET_KEY'] = 'sadsada2321312'  # 用serect_key 加盐加密
    

    登录小 demo

    from flask import Flask,render_template,request,session,redirect
    
    app = Flask(__name__,template_folder='templates',static_url_path='/static/',static_folder='static')
    app.config['SECRET_KEY'] = 'sadsada2321312'
    
    @app.route('/',methods=['GET'])
    def hello_world():
        user = session.get('user','')
        if user:
            return 'Hello World!'
        else:
            return redirect('/login')
    
    @app.route('/login',methods=['GET','POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        else:
            user = request.values.get('user')
            if user:
                session['user'] = user
                return redirect('/')
            else:
                msg = '用户名密码错误'
                return render_template('login.html',msg=msg)
    
    if __name__ == '__main__':
        app.run()
  • 相关阅读:
    left join 多表关联查询
    Dictionary解析json,里面的数组放进list,并绑定到DataGridView指定列
    C#同一位置切换显示两个Panel内容
    C#点击按钮用DataGridView动态增加行、删除行,增加按钮列
    C#获取本机mac地址
    C# MD5加密
    C# SQLiteDataReader获得数据库指定字段的值
    linux下mongodb安装、服务器、客户端、备份、账户命令
    ubuntu下创建python的虚拟环境
    python多进程之间的通信:消息队列Queue
  • 原文地址:https://www.cnblogs.com/big-handsome-guy/p/8535147.html
Copyright © 2020-2023  润新知