Flask
1.Install
https://flask.palletsprojects.com/en/1.1.x/installation/#install-flask
2.Quick Start
https://flask.palletsprojects.com/en/1.1.x/quickstart/
3.html file 預設放在 templates folder之下
4.Flask路由的概念
/根目錄 >導向的函式hello_world
/hello/<username>str導向的函式hello_user
/hello/<int:userid>int導向的函式hello_userid
methods=[‘GET’,’POST’] 兩種方法
render_template(“test.html”)導向html file in templates folder
url_for(“hello_user”)查詢函式的路由,一般來說路由會變但是函式不會變
5.Flask+MySql
Install
PyMySQL:ORM
Flask-SQLAlchemy:ORM的ORM
Install MySQL Server
- 開啟系統偏好設定,找到mysql,點選Initialize Database。
- 輸入你的新密碼。
- 選擇‘Use legacy password‘。[重要]
- 重啟mysql服務。
- 現在可以使用Navicat連結
mysql終端機指令
mysql -u root -p
create datebase dbname;
show database;
use dbname;
create table tablename(colname type,);
create table user(id int , username varchar(80) , email varchar(120));
show tables;
describe tablename; //顯示table中的欄位名稱及型態
select * from tablename;
exit;
Flask串SQLAlchemy
1.路由功能
2.app.config.from_object(‘config’) //將「機密網路設定資料」放到程式外面
3.db = SQLAlchemy(app)//串進資料庫
4.class user(db.Model)://user 為 資料表(map user table)
id = db.Column(db.Integer, primary_key=True)//三個欄位 型態 等
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
5.If(request.method==’POST’):
6.username = request.form[“username”] //取網頁username值
email = request.form[“email”]//取網頁email值
User = user(id=1,username=username,email=email) //class user
db.session.add(User)
db.session.commit()
1.<form action=”/” method=”POST”>
2.<input type=”text” id=”username” name=”username”><br>
<input type=”text” id=”email” name=”email”><br>
<input type=”submit” value=”Submit”>
//name 為前台與後台資料傳輸的依據
MVC網頁框架
Model資料庫 View顯示 計算 Controller路由
APP /Models /Views資料夾 加入__init__.py成為python package方便引用
app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object(‘config’)
db = SQLAlchemy(app)
Router.py
from app import app
from app.views.user import views //引用app>views>user.py>class views
@app.router(‘/’,methods=[‘GET’])
def index():
return views.index()//引用class views > def index()
@app.router(‘/new’,methods=[‘GET’])
def new():
return views.new()
@app.router(‘/create’,methods=[‘POST’])
def create():
return views.create()
user.py
from flask import render_template, request
from app.models.user import User,_create // 引入Models
class views:
def index():
return render_template(‘users/index.html’) //templates/users/index.html
def new():
return render_template(‘users/new.html’)
def create():
username = request.form[‘username’]
email = request.form[‘email’]
//存入資料 call models
_create(username,email)
return “User creation successful”
models/user.py
from .. import db //app>__init__.py>db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80),unique=True)
email = db.Column(db.String(120),unique=True)
def _create(username,email)
user = User(id=1,username=username,email=email)
db.session.add(user)
db.session.commit()
return
layout.html架構 引入一樣的架構
{% block body %}
{% endblock %}
new.html
{% extends “users/layout.html” %}
<form action=”/create” method=”post”>
<label for=”username”>username</label>
<input type=”text” name=”username”></br>
<label for=”email”>email</label>
<input type=”text” name=”email”></br>
<input type=”submit” value=”submit”>
{% endblock %}
更改進入的主程式main.py to Router.py
$ export FLASK_APP=Router.py
$ python -m flask run
* Running on http://127.0.0.1:5000/