zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    R语言--自定义函数证明中心极限定理
    R基础for、while、自定义函数
    R基础绘图、时间序列生成
    装R包(package)error:(as ‘lib’ is unspecified)installation of package had non-zero exit status
    GraphPad Prism中文显示错误
    SAS学笔记_chapter_library
    excel表格打印时铺满纸张
    SAS学笔记_chapter1_基本概念
    支持向量机课(SVM)(五)--SMO算法(省去公式推导,只讲其思想)
    Web前端学习-第六课HTML篇
  • 原文地址:https://www.cnblogs.com/big-handsome-guy/p/8535147.html
Copyright © 2011-2022 走看看