python web框架flask學(xué)習(xí)總結(jié)(一)

參考了網(wǎng)上各個大牛的看法,最后決定學(xué)習(xí)flask框架,然后國慶期間將flask學(xué)習(xí)了一個大概并寫了一個小項目,最后來做一個筆記。因為之前接觸過php的web開發(fā)框架thinkphp5,所以上手flask感覺很輕松。

flask相關(guān)庫的下載

主要學(xué)習(xí)了flask,flask-sqlalchemy,flask-migrate,flask-script庫。題主是win10,直接在命令行進行"pip install xxx"就行。

主要內(nèi)容

因為題主是來做一個總結(jié),所以不是按照學(xué)習(xí)步驟來一個個深入,在此寫一個總括。
首先一個再小的項目也離不開以下的內(nèi)容。

  • 相關(guān)配置:調(diào)試,數(shù)據(jù)庫等
  • 路由
  • 模型(定義),模板(繼承,渲染等)
  • 與數(shù)據(jù)庫有關(guān)的各種操作:增刪改查,數(shù)據(jù)庫的遷移等
  • 請求(GET,POST)

配置

相關(guān)配置主要放在config.py文件中,主要配置有DEBUG,數(shù)據(jù)庫的連接"SQLALCHEMY_DATABASE_URI",注意是URI不是URL,總感覺這里巨坑
URI形式是

dialect+driver://username:password@host:port/database

有些參數(shù)是可選的,比如port
題主是python3,這里的配置是

DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = 'root'
HOST = 'localhost'
# 數(shù)據(jù)庫名,要提前創(chuàng)建好
DATABASE = 'xxx'

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

在主文件中導(dǎo)入這個配置文件

import config
app.config.from_object(config)

路由

flask的路由使用Flask應(yīng)用實例的route裝飾器將一個URL規(guī)則綁定到 一個視圖函數(shù)上

@app.route('/')
def index():
    pass
# 傳參
@app.route('/user/<username>')
def user(username):
    pass

模型

要學(xué)習(xí)flask-sqlalchemy ,首先要簡單理解ORM,簡單理解就是一個類對應(yīng)了一張表。通常會將所有模型放在一個models.py文件中。
比如我要建一張article表,有四個字段
分別是id,title,content,create_time,分別是四種數(shù)據(jù)類型,在models.py中定義一個Article類,如下:

# 導(dǎo)入datetime庫,因為用到了時間
from datetime import datetime
class Article(db.Model):
    # 設(shè)置表名
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(30), nullable=False)
    content = db.Column(db.Text, nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)

對于用戶表,常涉及到用戶密碼之類的,需要加密
這里也給出一個例子,給出一個User類

# 用來加密和解密
from werkzeug.security import generate_password_hash, check_password_hash

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    telephone = db.Column(db.String(11), nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(100), nullable=False)

    def __init__(self, *args, **kwargs):
        telephone = kwargs.get('telephone')
        username = kwargs.get('username')
        password = kwargs.get('password')

        self.telephone = telephone
        self.username = username
       # 加密
        self.password = generate_password_hash(password)

    # 定義驗證密碼的函數(shù),如果返回True,則進行下一步操作
    def check_password(self, raw_password):
        result = check_password_hash(self.password, raw_password)
        return result

接下來的重點是一對多,以及多對多的關(guān)系定義
一個用戶可以寫過多篇文章
在上一個Article類中,添加

# 定義外鍵,
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
# 定義關(guān)系,與User相關(guān)聯(lián),反過來User通過articles即可查詢到這個用戶寫過的文章
author = db.relationship('User', backref=db.backref('articles'))

暫時先寫到這里吧,寫太多會顯得很臃腫,相關(guān)函數(shù)的詳細用法請直接百度或查看文檔,非常感謝看到最后。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容