Flask

Steven Wang
9 min readOct 9, 2020

--

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/

--

--

Steven Wang
Steven Wang

No responses yet