flask 程序結構歸納

 

以此結構爲例,這個小項目是《Flask Web開發:基於python的web應用開發實戰》第一部分結束後的代碼框架html

第一層python

有app、tests、migrations三個文件夾和config.py、manage.py兩個py文件以及data-dev.sqlite、data-tests.sqlite兩個sqlite數據庫web

  app文件夾下主要寫flask程序;
  migrations 文件夾包含數據庫遷移腳本;
  tests文件夾下編寫單元測試;sql

  config.py用來存儲配置shell

  manage.py 用於啓動程序以及其餘的程序任務數據庫

  data-dev.sqlite是程序運行時所用的數據庫flask

  data-tests.sqlite是單元測試所使用的數據庫bootstrap

  app層session

  下面有main、static、templates三個文件夾以及__init__.py、email.py、models.py三個py文件app

  main文件夾用來保存藍本,此文件夾下__inir__.py文件裏面建立藍本,(  藍本和程序相似,也能夠定義路由。不一樣的是,在藍本中定義的路由處於休眠狀態,直到藍本註冊到程序上後,路由才真正成爲程序的一部分。)main文件夾下views.py用來保存程序的路由,errors.py用來處理錯誤,forms.py是存放表單定義

 

  static存放靜態文件

 

  templates用來存放響應的html文件,mail子文件裏面的用來保存發送郵件所需的.html和.txt文件

 

  __inir__.py文件裏面包含create_app()函數,已經app的各類初始化

  email.py包含send_email()發送文件函數(異步)

  models.py包含User和Role兩個表定義

  tests層

  test_basics.py用來編寫單元測試

應該還有一個venv文件夾用來包含虛擬環境和一個requirements.txt 文件,此文件列出了全部依賴包,便於在其餘電腦中從新生成相同的虛擬環境

  

我的需掌握  

config.py中含有一個基類Config定義,三個繼承類定義DevlopmentConfig、TestingConfig、ProductionConfig和一個元組config

  manage.py中含有app 建立,manage、migrate初始化,以及make_shell_context()函數在命令行獲取上下文,避免頻繁導入還有test()函數,用來測試。

  app下__init__.py文件含有create_app()函數,部分代碼有

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()


def create_app(config_name):  #建立app
    app = Flask(__name__)
    app.config.from_object(config[config_name])  #將配置類中的配置導入程序
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)

    from .main import main as main_blueprint  #導入藍本main
    app.register_blueprint(main_blueprint)  #在主程序中註冊藍本


    return app

 

app.config.from_object(config[config_name]) 將配置類中的配置導入程序!!

在email中利用有這樣一行代碼

app = current_app._get_current_object() 

 

 current_app程序上下文!!!,理解有些模糊

 

在app/main/views下有一段代碼比較重要

@main.route('/',methods = ['POST','GET'])   #請求方式無論是post仍是get都執行這個視圖函數
def index():
    form = NameForm()  #表單實例
    if form.validate_on_submit():   #提交按鈕是否成功點擊
         # 從數據庫中查找和表單數據同樣的數據,若是有,取第一個數據
        user = User.query.filter_by(username = form.name.data).first()
        if user is None:   #若是數據庫中沒有對應的數據
            user = User(username = form.name.data)  #在數據庫中對應的表中建立數據
            db.session.add(user)  #加入到用戶會話,以便數據庫進行提交
            session['known'] = False  #這是一個新用戶
            if current_app.config['FLASKY_ADMIN']:  #若是收件人已經定義,則調用發送郵件函數
                send_email(current_app.config['FLASKY_ADMIN'],'New User','mail/new_user',user = user)
                flash('The mail has been sent out')
        else:
            session['known'] = True  #這是一個老用戶
        session['name'] = form.name.data   #從表單獲取數據
        return redirect(url_for('.index'))
    return render_template('index.html',current_time = datetime.utcnow(),
                           form = form,name=session.get('name'),known

 

 

 

以上全是我的理解,初次接觸,學藝不精

2016-08-29

相關文章
相關標籤/搜索