乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Flask 使用小結(jié)

       River_LaLaLa 2016-08-21


      來源:伯樂在線專欄作者 - wklken

      鏈接:http://python./84003/

      點(diǎn)擊 → 了解如何加入專欄作者



      flask 使用的一些整理




      最簡(jiǎn)單的hello world


      #!/usr/bin/env python

      # encoding: utf-8

       

      from flask import Flask

      app = Flask(__name__)

       

      @app.route('/')

      def index():

          return 'hello world'

       

      if __name__ == '__main__':

          app.run(debug=True)

          #app.run(host='127.0.0.1', port=8000)


      之后,訪問http://localhost:5000


      支持post/get提交


      @app.route('/', methods=['GET', 'POST'])


      多個(gè)url指向


      @app.route('/')

      @app.route('/index')


      不管post/get使用統(tǒng)一的接收


      from flask import request

      args = request.args if request.method == 'GET' else request.form

      a = args.get('a', 'default')


      處理json請(qǐng)求


      request的header中


      'Content-Type': 'application/json'


      處理時(shí):


      data = request.get_json(silent=False)


      獲取post提交中的checkbox


      {%for page in pages %}

      tr>td>input type=checkbox name=do_delete value='{{ page['id'] }}'>td>td>

      {%endfor%}

       

      page_ids = request.form.getlist('do_delete')


      使用url中的參數(shù)


      @app.route('/query//')

      def query(qid):

          pass


      在request開始結(jié)束dosomething


      一般可以處理數(shù)據(jù)庫(kù)連接等等


      from flask import g

       

      app = .....

       

      @app.before_request

      def before_request():

          g.session = create_session()

       

      @app.teardown_request

      def teardown_request(exception):

          g.session.close()


      注冊(cè)Jinja2模板中使用的過濾器


      @app.template_filter('reverse')

      def reverse_filter(s):

          return s[::-1]


      或者


      def reverse_filter(s):

          return s[::-1]

      app.jinja_env.filters['reverse'] = reverse_filter


      可以這么用


      def a():...

      def b():...

       

      FIL = {'a': a, 'b':b}

      app.jinja_env.filters.update(FIL)


      注冊(cè)Jinja2模板中使用的全局變量


      JINJA2_GLOBALS = {'MEDIA_PREFIX': '/media/'}

      app.jinja_env.globals.update(JINJA2_GLOBALS)


      定義應(yīng)用使用的template和static目錄


      app = Flask(__name__, template_folder=settings.TEMPLATE_FOLDER, static_folder = settings.STATIC_PATH)


      使用Blueprint


      from flask import Blueprint

      bp_test = Blueprint('test', __name__)

      #bp_test = Blueprint('test', __name__, url_prefix='/abc')

       

      @bp_test.route('/')

       

      --------

      from xxx import bp_test

       

      app = Flask(__name__)

      app.register_blueprint(bp_test)


      實(shí)例:


      bp_video = Blueprint('video', __name__, url_prefix='/kw_news/video')

      @bp_video.route('/search/category/', methods=['POST', 'GET'])

      #注意這種情況下Blueprint中url_prefix不能以 '/' 結(jié)尾, 否則404


      使用session


      包裝cookie實(shí)現(xiàn)的,沒有session id


      app.secret_key = 'PS#yio`%_!((f_or(%)))s'

       

      # 然后

      from flask import session

       

      session['somekey'] = 1

      session.pop('logged_in', None)

       

      session.clear()

       

      #過期時(shí)間,通過cookie實(shí)現(xiàn)的

      from datetime import timedelta

      session.permanent = True

      app.permanent_session_lifetime = timedelta(minutes=5)


      反向路由


      from flask import url_for, render_template

       

      @app.route('/')

      def home():

          login_uri = url_for('login', next=url_for('home'))

          return render_template('home.html', **locals())


      上傳文件


      form action='/image/upload/' method='post' enctype='multipart/form-data'>

      input type='file' name='upload' />


      接收


      f = request.files.get('upload')

      img_data = f.read()


      直接返回某個(gè)文件


      return send_file(settings.TEMPLATE_FOLDER + 'tweet/tweet_list.html')


      請(qǐng)求重定向


      文檔(http://flask./docs/api/#flask.redirect)


      flask.redirect(location, code=302) the redirect status code. defaults to 302.Supported codes are 301, 302, 303, 305, and 307. 300 is not supported.


      @app.route('/')

      def hello():

          return redirect(url_for('foo'))

       

      @app.route('/foo')

      def foo():

          return'Hello Foo!'


      獲取用戶真實(shí)ip


      從request.headers獲取


      real_ip = request.headers.get('X-Real-Ip', request.remote_addr)


      或者, 使用werkzeug的middleware 文檔


      from werkzeug.contrib.fixers import ProxyFix

      app.wsgi_app = ProxyFix(app.wsgi_app)


      return json & jsonp


      import json

      from flask import jsonify, Response, json

       

      data = [] # or others

      return jsonify(ok=True, data=data)

       

      jsonp_callback =  request.args.get('callback', '')

      if jsonp_callback:

          return Response(

                  '%s(%s);' % (jsonp_callback, json.dumps({'ok': True, 'data':data})),

                  mimetype='text/javascript'

                  )

      return ok_jsonify(data)


      配置讀取方法


      # create our little application :)

      app = Flask(__name__)

       

      # Load default config and override config from an environment variable

      app.config.update(dict(

          DATABASE='/tmp/flaskr.db',

          DEBUG=True,

          SECRET_KEY='development key',

          USERNAME='admin',

          PASSWORD='default'

      ))

      app.config.from_envvar('FLASKR_SETTINGS', silent=True)

       

      ------------------

      # configuration

      DATABASE = '/tmp/minitwit.db'

      PER_PAGE = 30

      DEBUG = True

      SECRET_KEY = 'development key'

       

      # create our little application :)

      app = Flask(__name__)

      app.config.from_object(__name__)

      app.config.from_envvar('MINITWIT_SETTINGS', silent=True)


      幾個(gè)不常用的方法


      from flask import abort, flash

       

      abort

      if not session.get('logged_in'):

          abort(401)

       

      flash

      flash('New entry was successfully posted')


      異步調(diào)用


      想在flask的一個(gè)請(qǐng)求中處理異步, 除了使用消息系統(tǒng), 可以用簡(jiǎn)單的線程處理


      from threading import Thread

       

      def async(f):

          def wrapper(*args, **kwargs):

              thr = Thread(target=f, args=args, kwargs=kwargs)

              thr.start()

          return wrapper

       

      @async

      def dosomething(call_args):

          print call_args

       

      in a request handler, call `dosomething`


      error handler


      @app.errorhandler(404)

      def not_found_error(error):

          return render_template('404.html'), 404

       

      @app.errorhandler(500)

      def internal_error(error):

          db.session.rollback()

          return render_template('500.html'), 500


      項(xiàng)目配置


      1.直接


      app.config['HOST']='xxx.a.com'

      print app.config.get('HOST')


      2.環(huán)境變量


      export MyAppConfig=/path/to/settings.cfg

      app.config.from_envvar('MyAppConfig')


      3.對(duì)象


      class Config(object):

           DEBUG = False

           TESTING = False

           DATABASE_URI = 'sqlite://:memory:'

       

      class ProductionConfig(Config):

           DATABASE_URI = 'mysql://user@localhost/foo'

       

      app.config.from_object(ProductionConfig)

      print app.config.get('DATABASE_URI') # mysql://user@localhost/foo


      4.文件


      # default_config.py

      HOST = 'localhost'

      PORT = 5000

      DEBUG = True

       

      app.config.from_pyfile('default_config.py')


      EG. 一個(gè)create_app方法


      from flask import Flask, g

       

      def create_app(debug=settings.DEBUG):

          app = Flask(__name__,

                      template_folder=settings.TEMPLATE_FOLDER,

                      static_folder=settings.STATIC_FOLDER)

       

          app.register_blueprint(bp_test)

       

          app.jinja_env.globals.update(JINJA2_GLOBALS)

          app.jinja_env.filters.update(JINJA2_FILTERS)

       

          app.secret_key = 'PO+_)(*&678OUIJKKO#%_!(((%)))'

       

          @app.before_request

          def before_request():

              g.xxx = ...    #do some thing

       

          @app.teardown_request

          def teardown_request(exception):

              g.xxx = ...    #do some thing

       

          return app

       

      app = create_app(settings.DEBUG)

      host=settings.SERVER_IP

      port=settings.SERVER_PORT

      app.run(host=host, port=port)


        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多