參考了網(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ù)的詳細用法請直接百度或查看文檔,非常感謝看到最后。