知了課堂 Python Flask零基礎 筆記整理

知了課堂Python Flask零基礎到項目實戰系列視頻的全部筆記,現整理在下,視頻地址:css

筆記目錄:python

起步

安裝Python2.7:

  1. Mac下使用Python2.7.
  2. Windows下安裝Python2.7.
    • 從python官網下載python2.7的版本。
    • 雙擊python2.7,而後選擇安裝路徑,一頓下一步就能夠了。
    • 設置環境變量,把python的安裝路徑添加到PATH變量中。
    • 還須要設置一個環境變量,必定要設置,否則後面就不能正常安裝flask了。

Python虛擬環境介紹與安裝:

  1. 由於python的框架更新迭代太快了,有時候須要在電腦上存在一個框架的多個版本,這時候虛擬環境就能夠解決這個問題。
  2. 經過如下命令安裝虛擬環境:pip install virtualenv
  3. 開闢新的虛擬環境:virtualenv [virtualenv-name]
  4. 激活虛擬環境:
    • [類linux]:source [虛擬環境的目錄]/bin/activate
    • [windows]:直接進入到虛擬環境的目錄,而後執行activate
    • 退出虛擬環境:deactivate

pip安裝flask:

  1. 執行activate腳本,進入指定的虛擬環境。
  2. 在該虛擬環境中,執行如下命令安裝:pip install flask
  3. 驗證flask是否安裝成功:
    • 進入python命令行。
    >>> import flask
    >>> print flask.__version__

認識url:

  1. 若是使用的是http協議,那麼瀏覽器就會使用80端口去請求這個服務器的資源。
  2. 若是使用的是https協議,那麼瀏覽器會使用443端口去請求這個服務器的資源。
    http://www.jianshu.com/
    https://www.baidu.com/
    https://www.baidu.com/s?ie=utf-8&f=8

http://baike.baidu.com/link?url=ELcglgxAgFQ9WlMytXEhxu-WBtI7mTlDj3TJ-Ht6ZSecAYt0hgqY0euqaB60opaEEZ7JChin5vUd_YkOgMi7BT5kc3E85ZXeoVL2iVfKZu_jHMcNabK8NXilqnfJknKsmysql

http://baike.baidu.com/link?url=ELcglgxAgFQ9WlMytXEhxu-WBtI7mTlDj3TJ-Ht6ZSecAYt0hgqY0euqaB60opaEEZ7JChin5vUd_YkOgMi7BT5kc3E85ZXeoVL2iVfKZu_jHMcNabK8NXilqnfJknKs#3linux

http://baike.baidu.com/link?url=ELcglgxAgFQ9WlMytXEhxu-WBtI7mTlDj3TJ-Ht6ZSecAYt0hgqY0euqaB60opaEEZ7JChin5vUd_YkOgMi7BT5kc3E85ZXeoVL2iVfKZu_jHMcNabK8NXilqnfJknKs#5nginx

URL詳解

URL是Uniform Resource Locator的簡寫,統一資源定位符。web

一個URL由如下幾部分組成:sql

scheme://host:port/path/?query-string=xxx#anchor

scheme:表明的是訪問的協議,通常爲http或者https以及ftp等。
host:主機名,域名,好比www.baidu.com。
port:端口號。當你訪問一個網站的時候,瀏覽器默認使用80端口。
path:查找路徑。好比:www.jianshu.com/trending/now,後面的trending/now就是path。
query-string:查詢字符串,好比:www.baidu.com/s?wd=python,後面的wd=python就是查詢字符串。
anchor:錨點,後臺通常不用管,前端用來作頁面定位的。

web服務器和應用服務器以及web應用框架:

web服務器:負責處理http請求,響應靜態文件,常見的有Apache,Nginx以及微軟的IIS.
應用服務器:負責處理邏輯的服務器。好比php、python的代碼,是不能直接經過nginx這種web服務器來處理的,只能經過應用服務器來處理,常見的應用服務器有uwsgi、tomcat等。
web應用框架:通常使用某種語言,封裝了經常使用的web功能的框架就是web應用框架,flask、Django以及Java中的SSH(Structs2+Spring3+Hibernate3)框架都是web應用框架。

Flask

第一個flask程序講解:

  1. 第一次建立項目的時候,要添加flask的虛擬環境。添加虛擬環境的時候,必定要選擇到python這個執行文件。
    好比你的flask的虛擬環境的目錄在/User/Virtualenv/flask-env/bin/python。
  2. flask程序代碼的詳細解釋:
    ```
    # 從flask這個框架中導入Flask這個類
    from flask import Flask

    # 初始化一個Flask對象
    # Flaks()
    # 須要傳遞一個參數__name__
    # 1. 方便flask框架去尋找資源
    # 2. 方便flask插件好比Flask-Sqlalchemy出現錯誤的時候,好去尋找問題所在的位置
    app = Flask(name)
    ```

    # @app.route是一個裝飾器
    # @開頭,而且在函數的上面,說明是裝飾器
    # 這個裝飾器的做用,是作一個url與視圖函數的映射
    # 127.0.0.1:5000/ -> 去請求hello_world這個函數,而後將結果返回給瀏覽器
    @app.route('/')
    def hello_world():
    return '我是第一個flask程序'

    # 若是當前這個文件是做爲入口程序運行,那麼就執行app.run()
    if name == 'main':
    # app.run()
    # 啓動一個應用服務器,來接受用戶的請求
    # while True:
    # listen()
    app.run()
    ```

設置debug模式:

  1. 在app.run()中傳入一個關鍵字參數debug,app.run(debug=True),就設置當前項目爲debug模式。
  2. debug模式的兩大功能:
    • 當程序出現問題的時候,能夠在頁面中看到錯誤信息和出錯的位置。
    • 只要修改了項目中的python文件,程序會自動加載,不須要手動從新啓動服務器。

使用配置文件:

  1. 新建一個config.py文件
  2. 在主app文件中導入這個文件,而且配置到app中,示例代碼以下:
    import config app.config.from_object(config)
  3. 還有許多的其餘參數,都是放在這個配置文件中,好比SECRET_KEYSQLALCHEMY這些配置,都是在這個文件中。

url傳參數:

  1. 參數的做用:能夠在相同的URL,可是指定不一樣的參數,來加載不一樣的數據。
  2. 在flask中如何使用參數:
    @app.route('/article/<id>') def article(id): return u'您請求的參數是:%s' % id
    • 參數須要放在兩個尖括號中。
    • 視圖函數中須要放和url中的參數同名的參數。

反轉URL:

  1. 什麼叫作反轉URL:從視圖函數到url的轉換叫作反轉url
  2. 反轉url的用處:
    • 在頁面重定向的時候,會使用url反轉。
    • 在模板中,也會使用url反轉。

頁面跳轉和重定向:

  1. 用處:在用戶訪問一些須要登陸的頁面的時候,若是用戶沒有登陸,那麼可讓她重定向到登陸頁面。
  2. 代碼實現:
    from flask import redirect,url redirect(url_for('login'))

url連接:使用url_for(視圖函數名稱)能夠反轉成url。

加載靜態文件:

  1. 語法:url_for('static',filename='路徑')
  2. 靜態文件,flask會從static文件夾中開始尋找,因此不須要再寫static這個路徑了。
  3. 能夠加載css文件,能夠加載js文件,還有image文件。
    第一個:加載css文件 <link rel="stylesheet" href="{{ url_for('static',filename='css/index.css') }}"> 第二個:加載js文件 <script src="{{ url_for('static',filename='js/index.js') }}"></script> 第三個:加載圖片文件 <img src="{{ url_for('static',filename='images/zhiliao.png') }}" alt="">

get請求和post請求:

  1. get請求:
    • 使用場景:若是隻對服務器獲取數據,並無對服務器產生任何影響,那麼這時候使用get請求。
    • 傳參:get請求傳參是放在url中,而且是經過?的形式來指定key和value的。
  2. post請求:
    • 使用場景:若是要對服務器產生影響,那麼使用post請求。
    • 傳參:post請求傳參不是放在url中,是經過form data的形式發送給服務器的。

get和post請求獲取參數:

  1. get請求是經過flask.request.args來獲取。
  2. post請求是經過flask.request.form來獲取。
  3. post請求在模板中要注意幾點:
    • input標籤中,要寫name來標識這個value的key,方便後臺獲取。
    • 在寫form表單的時候,要指定method='post',而且要指定action='/login/'
  4. 示例代碼:
    <form action="{{ url_for('login') }}" method="post"> <table> <tbody> <tr> <td>用戶名:</td> <td><input type="text" placeholder="請輸入用戶名" name="username"></td> </tr> <tr> <td>密碼:</td> <td><input type="text" placeholder="請輸入密碼" name="password"></td> </tr> <tr> <td></td> <td><input type="submit" value="登陸"></td> </tr> </tbody> </table> </form>

保存全局變量的g屬性:

g:global

  1. g對象是專門用來保存用戶的數據的。
  2. g對象在一次請求中的全部的代碼的地方,都是可使用的。

鉤子函數(hook):

  1. before_request:
    • 在請求以前執行的
    • 是在視圖函數執行以前執行的
    • 這個函數只是一個裝飾器,他能夠把須要設置爲鉤子函數的代碼放到視圖函數執行以前來執行
  2. context_processor:
    • 上下文處理器應該返回一個字典。字典中的key會被模板中當成變量來渲染。
    • 上下文處理器中返回的字典,在全部頁面中都是可用的。
    • 被這個裝飾器修飾的鉤子函數,必需要返回一個字典,即便爲空也要返回。
  1. cookie出現的緣由:在網站中,http請求是無狀態的。也就是說即便第一次和服務器鏈接後而且登陸成功後,第二次請求服務器依然不能知道當前請求是哪一個用戶。cookie的出現就是爲了解決這個問題,第一次登陸後服務器返回一些數據(cookie)給瀏覽器,而後瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器經過瀏覽器攜帶的數據就能判斷當前用戶是哪一個了。
  2. 若是服務器返回了cookie給瀏覽器,那麼瀏覽器下次再請求相同的服務器的時候,就會自動的把cookie發送給瀏覽器,這個過程,用戶根本不須要管。
  3. cookie是保存在瀏覽器中的,相對的是瀏覽器。

session:

  1. session介紹:session和cookie的做用有點相似,都是爲了存儲用戶相關的信息。不一樣的是,cookie是存儲在本地瀏覽器,而session存儲在服務器。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有必定的弊端,就是會佔用服務器的資源,但如今服務器已經發展至今,一些session信息仍是綽綽有餘的。
  2. 使用session的好處:
    • 敏感數據不是直接發送回給瀏覽器,而是發送回一個session_id,服務器將session_id和敏感數據作一個映射存儲在session(在服務器上面)中,更加安全。
    • session能夠設置過時時間,也從另一方面,保證了用戶的帳號安全。

flask中的session工做機制:

  1. flask中的session機制是:把敏感數據通過加密後放入session中,而後再把session存放到cookie中,下次請求的時候,再從瀏覽器發送過來的cookie中讀取session,而後再從session中讀取敏感數據,並進行解密,獲取最終的用戶數據。
  2. flask的這種session機制,能夠節省服務器的開銷,由於把全部的信息都存儲到了客戶端(瀏覽器)。
  3. 安全是相對的,把session放到cookie中,通過加密,也是比較安全的,這點你們放心使用就能夠了。

操做session:

  1. session的操做方式:
    • 使用session須要從flask中導入session,之後全部和sessoin相關的操做都是經過這個變量來的。
    • 使用session須要設置SECRET_KEY,用來做爲加密用的。而且這個SECRET_KEY若是每次服務器啓動後都變化的話,那麼以前的session就不能再經過當前這個SECRET_KEY進行解密了。
    • 操做session的時候,跟操做字典是同樣的。
    • 添加sessionsession['username']
    • 刪除:session.pop('username')或者del session['username']
    • 清除全部sessionsession.clear()
    • 獲取sessionsession.get('username')
  2. 設置session的過時時間:
    • 若是沒有指定session的過時時間,那麼默認是瀏覽器關閉後就自動結束
    • 若是設置了session的permanent屬性爲True,那麼過時時間是31天。
    • 能夠經過給app.config設置PERMANENT_SESSION_LIFETIME來更改過時時間,這個值的數據類型是datetime.timedelay類型。

Jinja2

Flask渲染Jinja2模板和傳參:

  1. 如何渲染模板:
    • 模板放在templates文件夾下
    • flask中導入render_template函數。
    • 在視圖函數中,使用render_template函數,渲染模板。注意:只須要填寫模板的名字,不須要填寫templates這個文件夾的路徑。
  2. 模板傳參:
    • 若是隻有一個或者少許參數,直接在render_template函數中添加關鍵字參數就能夠了。
    • 若是有多個參數的時候,那麼能夠先把全部的參數放在字典中,而後在render_template中,
      使用兩個星號,把字典轉換成關鍵參數傳遞進去,這樣的代碼更方便管理和使用。
  3. 在模板中,若是要使用一個變量,語法是:{{params}}
  4. 訪問模型中的屬性或者是字典,能夠經過{{params.property}}的形式,或者是使用{{params['age']}}.

過濾器:

  1. 介紹和語法:
    • 介紹:過濾器能夠處理變量,把原始的變量通過處理後再展現出來。做用的對象是變量。
    • 語法:
      {{ avatar|default('xxx') }}
  2. default過濾器:若是當前變量不存在,這時候能夠指定默認值。
  3. length過濾器:求列表或者字符串或者字典或者元組的長度。
  4. 經常使用的過濾器:
    abs(value):返回一個數值的絕對值。示例:-1|abs
    default(value,default_value,boolean=false):若是當前變量沒有值,則會使用參數中的值來代替。示例:name|default('xiaotuo')——若是name不存在,則會使用xiaotuo來替代。boolean=False默認是在只有這個變量爲undefined的時候纔會使用default中的值,若是想使用python的形式判斷是否爲false,則能夠傳遞boolean=true。也可使用or來替換。
    escape(value)或e:轉義字符,會將<、>等符號轉義成HTML中的符號。示例:content|escape或content|e。
    first(value):返回一個序列的第一個元素。示例:names|first
    format(value,*arags,**kwargs):格式化字符串。好比:

    {{ "%s" - "%s"|format('Hello?',"Foo!") }}
    將輸出:Helloo? - Foo!
    last(value):返回一個序列的最後一個元素。示例:names|last。

    length(value):返回一個序列或者字典的長度。示例:names|length。
    join(value,d=u''):將一個序列用d這個參數的值拼接成字符串。
    safe(value):若是開啓了全局轉義,那麼safe過濾器會將變量關掉轉義。示例:content_html|safe。
    int(value):將值轉換爲int類型。
    float(value):將值轉換爲float類型。
    lower(value):將字符串轉換爲小寫。
    upper(value):將字符串轉換爲小寫。
    replace(value,old,new): 替換將old替換爲new的字符串。
    truncate(value,length=255,killwords=False):截取length長度的字符串。
    striptags(value):刪除字符串中全部的HTML標籤,若是出現多個空格,將替換成一個空格。
    trim:截取字符串前面和後面的空白字符。
    string(value):將變量轉換成字符串。
    wordcount(s):計算一個長字符串中單詞的個數。

if判斷:

  1. 語法:
    {% if xxx %} {% else %} {% endif %}
  2. if的使用,能夠和python中相差無幾。

for循環遍歷列表和字典:

  1. 字典的遍歷,語法和python同樣,可使用items()keys()values()iteritems()iterkeys()itervalues()
    {% for k,v in user.items() %} <p>{{ k }}:{{ v }}</p> {% endfor %}
  2. 列表的遍歷:語法和python同樣。
    {% for website in websites %} <p>{{ website }}</p> {% endfor %}

繼承和block:

  1. 繼承做用和語法:
    • 做用:能夠把一些公共的代碼放在父模板中,避免每一個模板寫一樣的代碼。
    • 語法:
      {% extends 'base.html' %}
  2. block實現:
    • 做用:可讓子模板實現一些本身的需求。父模板須要提早定義好。
    • 注意點:字模板中的代碼,必須放在block塊中。

數據庫

Mac和Windows下數據庫的安裝:

  1. Mysql爲例
  2. https://dev.mysql.com/downloads/mysql/
  3. Mac上安裝Mysql很簡單,直接一頓下一步安裝就能夠了。
  4. 設置初始化密碼的命令是:
    mysqladmin -uroot password [password]
  5. windows:
    . 若是沒有安裝.net Framework 4,就在那個提示框中,找到下載的url,下載下來,安裝便可。
    . 若是沒有安裝Microsoft Visual C++ x64,那麼就須要谷歌或者百度下載這個軟件進行安裝便可。

MySQL-python中間件的介紹與安裝:

  1. 若是是在類unix系統上,直接進入虛擬環境,輸入sudo pip install mysql-python
  2. 若是是在windows系統上,那麼在這裏下載http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下載MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl,而後在命令行中,進入到MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl所在的目錄,輸入如下命令進行安裝:
    pip install MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl

Flask-SQLAlchemy的介紹與安裝:

  1. ORM:Object Relationship Mapping(模型關係映射)。
  2. flask-sqlalchemy是一套ORM框架。
  3. ORM的好處:可讓咱們操做數據庫跟操做對象是同樣的,很是方便。由於一個表就抽象成一個類,一條數據就抽象成該類的一個對象。
  4. 安裝flask-sqlalchemysudo pip install flask-sqlalchemy

Flask-SQLAlchemy的使用:

  1. 初始化和設置數據庫配置信息:
    • 使用flask_sqlalchemy中的SQLAlchemy進行初始化:
      from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app)
  2. 設置配置信息:在config.py文件中添加如下配置信息:
    ```
    # dialect+driver://username:password@host:port/database
    DIALECT = 'mysql'
    DRIVER = 'mysqldb'
    USERNAME = 'root'
    PASSWORD = 'root'
    HOST = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'db_demo1'

    SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST
    ,PORT,DATABASE)

    SQLALCHEMY_TRACK_MODIFICATIONS = False
    ```

  3. 在主app文件中,添加配置文件:
    app = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app)
  4. 作測試,看有沒有問題:
    db.create_all()
    若是沒有報錯,說明配置沒有問題,若是有錯誤,能夠根據錯誤進行修改。

使用Flask-SQLAlchemy建立模型與表的映射:

  1. 模型須要繼承自db.Model,而後須要映射到表中的屬性,必須寫成db.Column的數據類型。
  2. 數據類型:
    • db.Integer表明的是整形.
    • db.String表明的是varchar,須要指定最長的長度。
    • db.Text表明的是text
  3. 其餘參數:
    • primary_key:表明的是將這個字段設置爲主鍵。
    • autoincrement:表明的是這個主鍵爲自增加的。
    • nullable:表明的是這個字段是否能夠爲空,默承認覺得空,能夠將這個值設置爲False,在數據庫中,這個值就不能爲空了。
  4. 最後須要調用db.create_all來將模型真正的建立到數據庫中。

Flask-SQLAlchemy數據的增、刪、改、查:

  1. 增:
    # 增長: article1 = Article(title='aaa',content='bbb') db.session.add(article1) # 事務 db.session.commit()
  2. 查:
    # 查 # select * from article where article.title='aaa'; article1 = Article.query.filter(Article.title == 'aaa').first() print 'title:%s' % article1.title print 'content:%s' % article1.content
  3. 改:
    # 改: # 1. 先把你要更改的數據查找出來 article1 = Article.query.filter(Article.title == 'aaa').first() # 2. 把這條數據,你須要修改的地方進行修改 article1.title = 'new title' # 3. 作事務的提交 db.session.commit()
  4. 刪:
    # 刪 # 1. 把須要刪除的數據查找出來 article1 = Article.query.filter(Article.content == 'bbb').first() # 2. 把這條數據刪除掉 db.session.delete(article1) # 3. 作事務提交 db.session.commit()

Flask-SQLAlchemy外鍵及其關係:

  1. 外鍵:
    ```
    class User(db.Model):
    tablename = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(100),nullable=False)

    class Article(db.Model):
    tablename = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)
    author_id = db.Column(db.Integer,db.ForeignKey('user.id'))

    author = db.relationship('User',backref=db.backref('articles'))
    ```
  2. author = db.relationship('User',backref=db.backref('articles'))解釋:
    • Article這個模型添加一個author屬性,能夠訪問這篇文章的做者的數據,像訪問普通模型同樣。
    • backref是定義反向引用,能夠經過User.articles訪問這個模型所寫的全部文章。
  3. 多對多:
    • 多對多的關係,要經過一箇中間表進行關聯。
    • 中間表,不能經過class的方式實現,只能經過db.Table的方式實現。
    • 設置關聯:tags = db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))須要使用一個關鍵字參數secondary=中間表來進行關聯。
    • 訪問和數據添加能夠經過如下方式進行操做:
      • 添加數據:
        ```
        article1 = Article(title='aaa')
        article2 = Article(title='bbb')

        tag1 = Tag(name='111')
        tag2 = Tag(name='222')

        article1.tags.append(tag1)
        article1.tags.append(tag2)

        article2.tags.append(tag1)
        article2.tags.append(tag2)

        db.session.add(article1)
        db.session.add(article2)

        db.session.add(tag1)
        db.session.add(tag2)

        db.session.commit()
        ```
      • 訪問數據:
        article1 = Article.query.filter(Article.title == 'aaa').first() tags = article1.tags for tag in tags: print tag.name

Flask-Script的介紹與安裝:

  1. Flask-Script:Flask-Script的做用是能夠經過命令行的形式來操做Flask。例如經過命令跑一個開發版本的服務器、設置數據庫,定時任務等。
  2. 安裝:首先進入到虛擬環境中,而後pip install flask-script來進行安裝。
  3. 若是直接在主manage.py中寫命令,那麼在終端就只須要python manage.py command_name就能夠了。
  4. 若是把一些命令集中在一個文件中,那麼在終端就須要輸入一個父命令,好比python manage.py db init
  5. 例子:
    ```
    from flask_script import Manager
    from flask_script_demo import app
    from db_scripts import DBManager

    manager = Manager(app)
    ```

    # 和數據庫相關的操做,我都放在一塊兒

    @manager.command
    def runserver():
    print '服務器跑起來了!!!!!'
    manager.add_command('db',DBManager)

    if name == 'main':
    manager.run()
    ```
  6. 有子命令的例子:
    ```
    #encoding: utf-8

    from flask_script import Manager

    DBManager = Manager()

    @DBManager.command
    def init():
    print '數據庫初始化完成'

    @DBManager.command
    def migrate():
    print '數據表遷移成功'
    ```

分開models以及解決循環引用:

  1. 分開models的目的:爲了讓代碼更加方便的管理。
  2. 如何解決循環引用:把db放在一個單獨的文件中,切斷循環引用的線條就能夠了。

Flask-Migrate的介紹與安裝:

  1. 介紹:由於採用db.create_all在後期修改字段的時候,不會自動的映射到數據庫中,必須刪除表,而後從新運行db.craete_all纔會從新映射,這樣不符合咱們的需求。所以flask-migrate就是爲了解決這個問題,她能夠在每次修改模型後,能夠將修改的東西映射到數據庫中。
  2. 首先進入到你的虛擬環境中,而後使用pip install flask-migrate進行安裝就能夠了。
  3. 使用flask_migrate必須藉助flask_scripts,這個包的MigrateCommand中包含了全部和數據庫相關的命令。
  4. flask_migrate相關的命令:
    • python manage.py db init:初始化一個遷移腳本的環境,只須要執行一次。
    • python manage.py db migrate:將模型生成遷移文件,只要模型更改了,就須要執行一遍這個命令。
    • python manage.py db upgrade:將遷移文件真正的映射到數據庫中。每次運行了migrate命令後,就記得要運行這個命令。
  5. 注意點:須要將你想要映射到數據庫中的模型,都要導入到manage.py文件中,若是沒有導入進去,就不會映射到數據庫中。
  6. manage.py的相關代碼:
    ```
    from flask_script import Manager
    from migrate_demo import app
    from flask_migrate import Migrate,MigrateCommand
    from exts import db
    from models import Article

    # init
    # migrate
    # upgrade
    # 模型 -> 遷移文件 -> 表

    manager = Manager(app)

    # 1. 要使用flask_migrate,必須綁定app和db
    migrate = Migrate(app,db)

    # 2. 把MigrateCommand命令添加到manager中
    manager.add_command('db',MigrateCommand)

    if name == 'main': manager.run() ```

相關文章
相關標籤/搜索