flask開發筆記
阿新 • • 發佈:2018-11-19
更新ing
不適合新手入門
虛擬環境
- 安裝虛擬環境
pip install virtualenv
- 新建環境
virtualenv [name]
- 啟用環境
在進入虛擬環境目錄下Scripts
資料夾後
activate
- 退出環境
在進入虛擬環境目錄下Scripts
資料夾後
deactivate
Debug模式
- 開啟
app.run(debug=Ture)
- 關閉
app.run(debug=False)
配置檔案
新建一個config.py
#encoding utf-8
DEBUG = Ture
然後在主程式裡面匯入
import config
最後應用
app.config.from_object(config)
url傳入引數
@app.route('/article/<id>')
def article(id):
return u"%s" % id
url反轉
from flask import url_for
#
url_for("article", id="123")
# return /article/123
重定義向
from flask import redirect
#
return redirect(url_for("login"))
return redirect("/login")
模板
在template
檔案下新建一個index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello, {{ name }}</h1>
<p>e-mail:{{ email }}</p>
</body>
</html>
#encoding: utf-8 from flask import Flask, render_template import config app = Flask(__name__) app.config.from_object(config) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/user/<name>/<email>') def name(name,email): context={ 'name':name, 'email':email } return render_template('index.html', **context) # = return render_template('index.html', name=name, email=email) if __name__ == '__main__': app.run()
jinjia2語法
模板繼承
{% extends 'base.html' %}
{% block main %}
{{ super() }}
{% endblock %}
flash
使用了bootstrap
樣式
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert"> ×</button>
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
載入靜態檔案
url_for('static', filename='css/base.css')
MySQL資料庫
進入MySQL 5.7 Command Line Client - Unicode
輸入密碼後
- 建立
create database [databaseName] charset utf8;
- 切換資料庫
use [databaseName]
- 檢視
show tables
desc [tableName]
select * from [tableName]
- 刪除
delete from [tableName]
刪除表資料 - 配置
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
模型操作
- 建立模型
Example:
class User(db.Model):
__tablename__='user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100), nullable=False)
pw = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), nullable=False, unique=True)
def __repr__(self):
return '<User %r>' % self.username
- 提交
db.session.commit()
- 新增
db.session.add()
- 刪除
db.session.delete()
- 建立資料庫
db.create_all()
- 刪除所有資料
db.drop_all()
python裝飾器
*args,**kwargs
可以代表任何形式的形參
from functools import wraps
#...
def my_decorator(func):
@wraps(func)
def wrapper(*args,**kwargs):
#do something
func(*args,**kwargs)
return wrapper
#...
@my_decorator
def run():
pass
資料庫Models定義
關聯模型
# 外來鍵定義 auther_id = db.Column(dp.Integer, db.ForeignKey('user.id')) # 互相引用 auther = db.relationship('User', backref=db.backref('questions'))
藍圖
目的:為了使業務邏輯更加清晰
專案結構:
├── project
│ ├── app # 業務目錄
│ │ ├── auto
│ │ │ └── views.py
│ │ └── main
│ │ └── views.py
│ ├── main.py # 入口程式
app.main.views.py
from flask import Flask, Blueprint
main = Blueprint('main',__name__)
@main.route('/')
def index():
return 'Main'
app.auto.views.py
from flask import Flask, Blueprint
auto = Blueprint('auto',__name__)
@auto.route('/')
def login():
return 'Auto'
main.py
from flask import Flask
from app.main.views import *
from app.auto.views import *
app = Flask(__name__)
app.register_blueprint(main) # 掛載藍圖main
app.register_blueprint(auto,url_prefix='/auto') # 掛載藍圖auto,並指定訪問字首
if __name__ == '__main__':
app.run()
於是訪問/
時,顯示Main
,而訪問/auto/
,顯示Auto
注意
url_for('main.index') # 需要指定藍圖,如main url_for('.index') # 可以預設相對定位 # 靜態檔案 URL 是 /admin/static admin = Blueprint('admin', __name__, static_folder='static') # 真正的模板檔案為 yourapplication/admin/templates/admin/index.html admin = Blueprint('admin', __name__, static_folder='static')